Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / Web Services / May 2006

Tip: Looking for answers? Try searching our database.

parameter order when calling a web service

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Duffcase - 29 May 2006 14:54 GMT
Hi.

I'm having some problems consuming a webservice. The server keeps
complaining about the wrong element beeing sent..

I have this method that takes two strings String_1 and String_2
The server expects to get String_1 first, but somehow my client (C# .net cf)
sends String_2 first..  On top of that, If i build solution and run the .exe
file, it works fine.

Is there any way to control what order parameters are sent to the server?

Thanks in advance for any help! :)
Gaurav Vaish (EduJini.IN) - 29 May 2006 18:22 GMT
> I have this method that takes two strings String_1 and String_2
> The server expects to get String_1 first, but somehow my client (C# .net
> cf)
> sends String_2 first..  On top of that, If i build solution and run the
> .exe
> file, it works fine.

Ensure that the proxy class generated is with the latest WSDL.

Can you shed some more light on what is the solution that you are talking
about and the exe is executed where?

Signature

Happy Hacking,
Gaurav Vaish
http://www.mastergaurav.org
http://webservices.edujini.in
-------------------

Duffcase - 30 May 2006 08:10 GMT
> Ensure that the proxy class generated is with the latest WSDL.
>
> Can you shed some more light on what is the solution that you are talking
> about and the exe is executed where?

Thanks for your reply.

The proxy class is from the latest WSDL.
The .exe is executed in a windows xp environment, forgot to mention that.

The solution is a document/literal web service that is supposed to log a
user in. The client supplies a username and a password.

The code for the client:

           MainController service = new MainController();
           service.Url = "http://10.0.102.112:8080/trim/ws";

           try
           {
               checkUserAccessLogin login = new checkUserAccessLogin();
               login.String_1 = brukernavn.Text;
               login.String_2 = passord.Text;
               
               checkUserAccessLoginResponse response =
service.checkUserAccessLogin(login);
               Users user = response.result;
               
           }
           catch (Exception ex)
           {
               MessageBox.Show("ERROR: " + ex.Message);
           }

relevant parts of the WSDL:

<complexType name="checkUserAccessLogin">

<sequence>
<element name="String_1" nillable="true" type="string"/>
<element name="String_2" nillable="true" type="string"/>
</sequence>
</complexType>

<element name="checkUserAccessLogin" type="tns:checkUserAccessLogin"/>

<complexType name="Users">

    <sequence>
<element name="address" nillable="true" type="string"/>
<element name="cellPhone" nillable="true" type="string"/>
<element name="email" nillable="true" type="string"/>
<element name="firstName" nillable="true" type="string"/>
<element name="groupID" nillable="true" type="int"/>
<element name="homePhone" nillable="true" type="string"/>
<element name="isActive" type="int"/>
<element name="isAdmin" type="int"/>
<element name="isDeleted" type="int"/>
<element name="language" nillable="true" type="string"/>
<element name="lastIP" nillable="true" type="string"/>
<element name="lastLogin" nillable="true" type="string"/>
<element name="lastName" nillable="true" type="string"/>
<element name="position" nillable="true" type="string"/>
<element name="postNo" nillable="true" type="string"/>
<element name="postRegion" nillable="true" type="string"/>
<element name="userID" nillable="true" type="int"/>
<element name="userName" nillable="true" type="string"/>
<element name="userPass" nillable="true" type="string"/>
<element name="workPhone" nillable="true" type="string"/>
</sequence>
</complexType>

</types>

<message name="MainControllerInterface_checkUserAccessLogin">
<part element="ns1:checkUserAccessLogin" name="parameters"/>
</message>

<operation name="checkUserAccessLogin">
<input message="tns:MainControllerInterface_checkUserAccessLogin"/>
<output message="tns:MainControllerInterface_checkUserAccessLoginResponse"/>
</operation>

<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>

    <operation name="checkUserAccessLogin">
<soap:operation soapAction=""/>

    <input>
<soap:body use="literal"/>
</input>

    <output>
<soap:body use="literal"/>
</output>
</operation>

hope this helps.
Kirk Allen Evans - 30 May 2006 09:23 GMT
Unable to reproduce the error.  In my tests using your WSDL, the parameters
were serialized/deserialized in the correct order.  Have you been able to
capture the SOAP being sent from the client to verify that it is not being
serialized correctly?

As a side note, if you control the service, then strongly consider changing
the design to use a more secure approach. You should design this with
WS-Security, using WSE 3.0 or Windows Communication Foundation.  Either of
these technologies will provide you with a better long-term strategy that is
much more secure and more flexible for security options down the road.  It
is considered a bad security practice to pass the password back as the
result of  a security call, as this can be used in an attack to try to
obtain other user's credentials.

You can find more information on the WSE home page:

http://msdn.microsoft.com/webservices/webservices/building/wse/

You can also learn WSE by walking through a Hands On Lab exercise:

http://www.microsoft.com/downloads/details.aspx?familyid=9acd1f8e-97e2-43e2-b484
-a74a014a8206&displaylang=en


Signature

Kirk Allen Evans
Developer Evangelist
Microsoft Corporation
blogs.msdn.com/kaevans

=== This post provided "AS-IS" with no warranties and confers no rights ===

>> Ensure that the proxy class generated is with the latest WSDL.
>>
[quoted text clipped - 96 lines]
>
> hope this helps.
Kirk Allen Evans - 30 May 2006 09:38 GMT
Except that I just noticed you are running Compact Framework, and neither
WSE nor WCF run on NETCF yet.

I would still design this using WS-Security techniques with a UsernameToken,
hand-crufting the UsernameToken in the NETCF serialization code, and make
sure that you run the message over an SSL connection.

Signature

Kirk Allen Evans
Developer Evangelist
Microsoft Corporation
blogs.msdn.com/kaevans

=== This post provided "AS-IS" with no warranties and confers no rights ===

> Unable to reproduce the error.  In my tests using your WSDL, the
> parameters were serialized/deserialized in the correct order.  Have you
[quoted text clipped - 119 lines]
>>
>> hope this helps.
Duffcase - 30 May 2006 10:19 GMT
Thank you for your reply.

I intend to use some sort of security token to secure the service, however
I'm still in the initial process of developing a client to consume the
webservice. Thanks for the pointer though!

> Except that I just noticed you are running Compact Framework, and neither
> WSE nor WCF run on NETCF yet.
[quoted text clipped - 126 lines]
> >>
> >> hope this helps.
Duffcase - 30 May 2006 10:20 GMT
did you use .net cf when trying to reproduce the error?

> Unable to reproduce the error.  In my tests using your WSDL, the parameters
> were serialized/deserialized in the correct order.  Have you been able to
[quoted text clipped - 118 lines]
> >
> > hope this helps.
Gaurav Vaish (EduJini.IN) - 30 May 2006 09:32 GMT
>> Ensure that the proxy class generated is with the latest WSDL.

> The proxy class is from the latest WSDL.
> The .exe is executed in a windows xp environment, forgot to mention that.

Would reiterate... refresh you CF project (proxy class) for latest WSDL.
If it runs fine on desktop, it should behave identically from CF as well.

Signature

Happy Hacking,
Gaurav Vaish
http://www.mastergaurav.org
http://webservices.edujini.in
-------------------

Duffcase - 30 May 2006 10:24 GMT
As far as I understand there are two ways of passing parameters. Either
alphabetically or by position in the wsdl (which should be the "right" one).

But both should pass in my case. The String_1 comes first in both cases.

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.