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
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!TK2MSF TNGXA03.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....!
--
Mike Logan
"Mike Logan" wrote:
[color=blue]
> 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[/color]
of[color=blue]
> 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[/color]
first[color=blue]
> post. I am trying to use the "contract first" method for design of the[/color]
web[color=blue]
> service. I created an XSD with all my types and messages (one incoming[/color]
and[color=blue]
> one outgoing) for each operation. I them created a WSDL using the XSD.[/color]
The[color=blue]
> difference was that I ran WSDL.exe on a real WSDL, and "Add Web[/color]
Reference"[color=blue]
> 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,[/color]
made[color=blue]
> 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[/color]
should[color=blue]
> 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[/color]
also[color=blue]
> 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[/color]
incoming[color=blue]
> messages, and "Response" (for outgoing messages). In the ASMX?WSDL[/color]
version[color=blue]
> 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"[/color]
minOccurs="0" />[color=blue]
> </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[/color]
somewhere?[color=blue]
>
> Thanks for the help Marvin and Steven.
>
>
> Thanks,
> --
> Mike Logan
>
>
> "Steven Cheng[MSFT]" wrote:
>[color=green]
> > Hi Mike,
> >
> > As Marvin has mentioned, the VS.NET IDE actually also use the wsdl.exe[/color][/color]
or[color=blue][color=green]
> > 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[/color][/color]
also[color=blue][color=green]
> > occuring on other webmethod?
> >
> > Regards,
> >
> > Steven Cheng
> > Microsoft Online Support
> >
> > 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:
> >[/color][/color]
TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!newsfee d00.sul.t-online.de!t-onli[color=blue][color=green]
> >[/color][/color]
ne.de!83.128.0.12.MISMATCH!news-out2.kabelfoon.nl!newsfeed.kabelfoon.nl!xind[color=blue][color=green]
> >[/color][/color]
i.nntp.kabelfoon.nl!216.196.110.149.MISMATCH!borde r2.nntp.ams.giganews.com!n[color=blue][color=green]
> >[/color][/color]
ntp.giganews.com!amsnews11.chello.com!amsnews14.ch ello.com!news.chello.nl.PO[color=blue][color=green]
> > 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:
> >[color=darkred]
> > >I used WSDL.exe to generate a client side web proxy for a web service,[/color]
> > called[color=darkred]
> > >the web service, got the results but an array returned by the web[/color][/color][/color]
service[color=blue][color=green]
> > is[color=darkred]
> > >not in the results.
> > >
> > >However if I use "Add Web Reference" for the same service the same[/color]
> > function[color=darkred]
> > >works appropriately.
> > >
> > >Here is the client proxy generated from WSDL.exe
> > >[/color]
> >[/color]
><System.Web.Services.Protocols.SoapDocumentMethod Attribute("capeconnect:App[color=green]
> > Sec:AppSecPortType#getApplicationUsers",[color=darkred]
> > >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.SoapBindingU se.Literal,[/color]
> >[/color]
>ParameterStyle:=System.Web.Services.Protocols.Soa pParameterStyle.Wrapped)>[color=green]
> > _[color=darkred]
> > > Public Function getApplicationUsers() As
> > ><System.Xml.Serialization.XmlArrayAttribute("user s"),
> > >System.Xml.Serialization.XmlArrayItemAttribute("u sers",[/color]
> > IsNullable:=false)>[color=darkred]
> > >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"
> > >[/color]
> >[/color]
><System.Web.Services.Protocols.SoapDocumentMethod Attribute("capeconnect:App[color=green]
> > Sec:AppSecPortType#getApplicationUsers",[color=darkred]
> > >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.SoapBindingU se.Literal,[/color]
> >[/color]
>ParameterStyle:=System.Web.Services.Protocols.Soa pParameterStyle.Wrapped)>[color=green]
> > _[color=darkred]
> > > Public Function getApplicationUsers() As
> > ><System.Xml.Serialization.XmlElementAttribute("us ers")> user()
> > > Dim results() As Object = Me.Invoke("getApplicationUsers",[/color][/color][/color]
New[color=blue][color=green][color=darkred]
> > >Object(-1) {})
> > > Return CType(results(0),user())
> > > End Function
> > >
> > >
> > >What is the benefit of using WSDL.exe to generate the client compared[/color][/color][/color]
to[color=blue][color=green][color=darkred]
> > >"Add Web Reference".
> > >
> > >Thanks, Mike L[/color][/color][/color]