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 / October 2005

Tip: Looking for answers? Try searching our database.

WSDL.exe vs. "Add Web Reference"

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Mike Logan - 25 Oct 2005 19:38 GMT
I used WSDL.exe to generate a client side web proxy for a web service, called
the web service, got the results but an array returned by the web service is
not in the results.

However if I use "Add Web Reference" for the same service the same function
works appropriately.

Here is the client proxy generated from WSDL.exe

<System.Web.Services.Protocols.SoapDocumentMethodAttribute("capeconnect:AppSec:AppSecPortType#getApplicationUsers",
RequestElementName:="getApplicationUsersRequest",
RequestNamespace:="http://www.vita.virginia.gov/xml/xsd/AppSec1.xsd",
ResponseNamespace:="http://www.vita.virginia.gov/xml/xsd/AppSec1.xsd",
Use:=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)>  _
   Public Function getApplicationUsers() As
<System.Xml.Serialization.XmlArrayAttribute("users"),
System.Xml.Serialization.XmlArrayItemAttribute("users", IsNullable:=false)>
user()
       Dim results() As Object = Me.Invoke("getApplicationUsers", New
Object(-1) {})
       Return CType(results(0), user())
   End Function

Here is the client proxy from "Add Web Reference"

<System.Web.Services.Protocols.SoapDocumentMethodAttribute("capeconnect:AppSec:AppSecPortType#getApplicationUsers",
RequestElementName:="getApplicationUsersRequest",
RequestNamespace:="http://www.vita.virginia.gov/xml/xsd/AppSec1.xsd",
ResponseNamespace:="http://www.vita.virginia.gov/xml/xsd/AppSec1.xsd",
Use:=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)>  _
       Public Function getApplicationUsers() As
<System.Xml.Serialization.XmlElementAttribute("users")> user()
           Dim results() As Object = Me.Invoke("getApplicationUsers", New
Object(-1) {})
           Return CType(results(0),user())
       End Function

What is the benefit of using WSDL.exe to generate the client compared to
"Add Web Reference".

Thanks, Mike L.
Signature

Mike Logan

Marvin Smit - 26 Oct 2005 08:05 GMT
Hi,

Visual Studio actually call the WSDL.exe in the background when
setting a webreference. Essentially there is no difference. The only
different is that when using the command line yourself you have more
contorl over the options you rcan use.

Hope this helps,

Marvin Smit.

>I used WSDL.exe to generate a client side web proxy for a web service, called
>the web service, got the results but an array returned by the web service is
[quoted text clipped - 39 lines]
>
>Thanks, Mike L.
Steven Cheng[MSFT] - 26 Oct 2005 10:46 GMT
Hi Mike,

As Marvin has mentioned, the VS.NET IDE actually also use the wsdl.exe or
the same code to generate the clientside proxy but may use some default
setting for some of the wsdl.exe's optional parameters. Is the problem also
occuring on other webmethod?

Regards,

Steven Cheng
Microsoft Online Support

Signature

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)


--------------------
From: Marvin Smit <marvin.smit@gmail.com>
Newsgroups: microsoft.public.dotnet.framework.webservices
Subject: Re: WSDL.exe vs. "Add Web Reference"
Date: Wed, 26 Oct 2005 09:05:33 +0200
Message-ID: <2kaul153mco7m5kmjg46ieotqiv86n2u4e@4ax.com>
References: <38283331-BBAD-4F42-90E2-A4E65CAA8227@microsoft.com>
X-Newsreader: Forte Free Agent 3.0/32.763
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Complaints-To: abuse@chello.nl
Organization: chello.nl
Lines: 58
NNTP-Posting-Host: 62.194.138.116 (62.194.138.116)
NNTP-Posting-Date: Wed, 26 Oct 2005 09:03:37 +0200
X-Trace: d3f40435f2a499b672fd104598
Path:
TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!newsfeed00.sul.t-online.de!t-onli
ne.de!83.128.0.12.MISMATCH!news-out2.kabelfoon.nl!newsfeed.kabelfoon.nl!xind
i.nntp.kabelfoon.nl!216.196.110.149.MISMATCH!border2.nntp.ams.giganews.com!n
ntp.giganews.com!amsnews11.chello.com!amsnews14.chello.com!news.chello.nl.PO
STED!not-for-mail
Xref: TK2MSFTNGXA01.phx.gbl
microsoft.public.dotnet.framework.webservices:8359
X-Tomcat-NG: microsoft.public.dotnet.framework.webservices

Hi,

Visual Studio actually call the WSDL.exe in the background when
setting a webreference. Essentially there is no difference. The only
different is that when using the command line yourself you have more
contorl over the options you rcan use.

Hope this helps,

Marvin Smit.

On Tue, 25 Oct 2005 11:38:14 -0700, "Mike Logan"
<MikeLogan@community.nospam> wrote:

>I used WSDL.exe to generate a client side web proxy for a web service, called
>the web service, got the results but an array returned by the web service is
[quoted text clipped - 11 lines]
>Use:=System.Web.Services.Description.SoapBindingUse.Literal,
>ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)>
_
>    Public Function getApplicationUsers() As
><System.Xml.Serialization.XmlArrayAttribute("users"),
[quoted text clipped - 13 lines]
>Use:=System.Web.Services.Description.SoapBindingUse.Literal,
>ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)>
_
>        Public Function getApplicationUsers() As
><System.Xml.Serialization.XmlElementAttribute("users")> user()
[quoted text clipped - 7 lines]
>
>Thanks, Mike L.
Mike Logan - 26 Oct 2005 13:19 GMT
This problem doesn't occur on a method that doesn't return an array of
"complexTypes".  I have several other methods that return different types of
complexTypes, and those methods also work in either scenario.

For example this complexType (user):

<xs:complexType name="user">
    <xs:sequence>
        <xs:element name="userid" type="xs:int" />
        <xs:element name="firstname" type="xs:string" />
        <xs:element name="middlename" type="xs:string" />
        <xs:element name="lastname" type="xs:string" />
        <xs:element name="suffix" type="xs:string" />
    </xs:sequence>
</xs:complexType>

Is made into a class by WSDL, like this:

Public Class user
   
   Public userid As Integer
   Public firstname As String
   Public middlename As String
   ublic lastname As String
   Public suffix As String
   
End Class

The resulting method for returning an array of these was listed in my first
post.  I am trying to use the "contract first" method for design of the web
service.  I created an XSD with all my types and messages (one incoming and
one outgoing) for each operation.  I them created a WSDL using the XSD.  The
difference was that I ran WSDL.exe on a real WSDL, and "Add Web Reference"
ran it on a "asmx?WSDL" reference.  I generated the "server stubs" using
WSDL.exe i.e.

wsdl.exe /server /out:Server.vb /l:VB AppSec.WSDL AppSec.XSD

Then I placed this file in an "Empty Web Project", added a Web Service, made
the new Web Service class inherit the "Server" stub class, override the
methods, and that was it.

Enough rambling for me.  If I do all these steps correctly the client should
turn out the same each way.  What I am saying for these scenarios

- A server stub is generated from a WSDL (real one), and the client is also
generated from a WSDL (real one).
- A server stub is generated from a WSDL (real one), and the client is
generated via "Add Web Reference".

The client should be the same in each scenario, correct?

Well that question makes me wonder if the WSDL file is different from the
ASMX?WSDL

I did a quick comparison of these two:

- In my real WSDL each message was post fixed with "Request" (for incoming
messages, and "Response" (for outgoing messages).  In the ASMX?WSDL version
all messages were posted fixed with "SoapIn" and "SoapOut" respectively.
- In my original WSDL, the schema was defined in an XSD file.  In the
ASMX?WSDL version the schema was embedded.

Other than that no real difference.  OK, what is the difference in the
outgoing message of the operation that returns an array of the "user"
complexType.

In my XSD here is the relevant parts.

The outgoing message:

<xs:element name="getApplicationUsersResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="users" type="userList" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

complexType userList:

<xs:complexType name="userList">
    <xs:sequence>
        <xs:element name="users" type="user" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

However in the ASMX?WSDL the outgoing message is defined as this:

<s:element name="getApplicationUsersResponse">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="unbounded" name="users"
type="s0:user" />
        </s:sequence>
    </s:complexType>
</s:element>

I guess this is the difference??  Should my XSD be like the ASMX?WSDL
version of "getApplicationUsersResponse"?  I will do some testing but if
anyone can shed any light that would be appreciated.

Also, is there a guide on controling the output of the ASMX?WSDL somewhere?

Thanks for the help Marvin and Steven.

Thanks,
Signature

Mike Logan

> Hi Mike,
>
[quoted text clipped - 104 lines]
> >
> >Thanks, Mike L
Mike Logan - 26 Oct 2005 13:46 GMT
That was it.  Chaning my outgoing message in the XSD from this:

<xs:element name="getApplicationUsersResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="users" type="userList" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

To this:

<xs:complexType name="userList">
    <xs:sequence>
        <xs:element name="users" type="user" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

and the now the client works correctly....!

Signature

Mike Logan

> This problem doesn't occur on a method that doesn't return an array of
> "complexTypes".  I have several other methods that return different types of
[quoted text clipped - 212 lines]
> > >
> > >Thanks, Mike L
Steven Cheng[MSFT] - 27 Oct 2005 01:49 GMT
Thanks for your further followup Mike,

Glad that you're got it working now. If there're any further questions
later, please feel free to post here.

Thanks & Regards,

Steven Cheng
Microsoft Online Support

Signature

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)


--------------------
Thread-Topic: WSDL.exe vs. "Add Web Reference"
thread-index: AcXaKz/FNXE+LT1tQcGN5cGeXMBAnQ==
X-WBNR-Posting-Host: 165.176.240.10
From: "=?Utf-8?B?TWlrZSBMb2dhbg==?=" <MikeLogan@community.nospam>
References:  <38283331-BBAD-4F42-90E2-A4E65CAA8227@microsoft.com>
<2kaul153mco7m5kmjg46ieotqiv86n2u4e@4ax.com>
<f$oK#Ih2FHA.3220@TK2MSFTNGXA01.phx.gbl>
<D91AF04A-5A2E-4846-B5DB-D100B7933644@microsoft.com>
Subject: Re: WSDL.exe vs. "Add Web Reference"
Date: Wed, 26 Oct 2005 05:46:13 -0700
Lines: 249
Message-ID: <8E8F12EE-A5C5-42B7-836F-0B3C89E5D3E3@microsoft.com>
MIME-Version: 1.0
Content-Type: text/plain;
    charset="Utf-8"
Content-Transfer-Encoding: 7bit
X-Newsreader: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
Newsgroups: microsoft.public.dotnet.framework.webservices
NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250
Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGXA02.phx.gbl!TK2MSFTNGXA03.phx.gbl
Xref: TK2MSFTNGXA01.phx.gbl
microsoft.public.dotnet.framework.webservices:8362
X-Tomcat-NG: microsoft.public.dotnet.framework.webservices

That was it.  Chaning my outgoing message in the XSD from this:

<xs:element name="getApplicationUsersResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="users" type="userList" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

To this:

<xs:complexType name="userList">
    <xs:sequence>
        <xs:element name="users" type="user" maxOccurs="unbounded" minOccurs="0"
/>
    </xs:sequence>
</xs:complexType>

and the now the client works correctly....!

Signature

Mike Logan

> This problem doesn't occur on a method that doesn't return an array of
> "complexTypes".  I have several other methods that return different types of
[quoted text clipped - 137 lines]
> > X-Trace: d3f40435f2a499b672fd104598
> > Path:

TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!newsfeed00.sul.t-online.de!t-onli

ne.de!83.128.0.12.MISMATCH!news-out2.kabelfoon.nl!newsfeed.kabelfoon.nl!xind

i.nntp.kabelfoon.nl!216.196.110.149.MISMATCH!border2.nntp.ams.giganews.com!n

ntp.giganews.com!amsnews11.chello.com!amsnews14.chello.com!news.chello.nl.PO
> > STED!not-for-mail
> > Xref: TK2MSFTNGXA01.phx.gbl
[quoted text clipped - 68 lines]
> > >
> > >Thanks, Mike L

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.