Re: WSDL.exe vs. "Add Web Reference"



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,
--
Mike Logan


"Steven Cheng[MSFT]" wrote:

> 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
>
> Get Secure! www.microsoft.com/security
> (This posting is provided "AS IS", with no warranties, and confers no
> rights.)
>
> --------------------
> From: Marvin Smit <marvin.smit@xxxxxxxxx>
> 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@xxxxxxx>
> References: <38283331-BBAD-4F42-90E2-A4E65CAA8227@xxxxxxxxxxxxx>
> 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@xxxxxxxxx
> 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@xxxxxxxxxxxxxxxx> 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
> >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:App
> Sec: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:App
> Sec: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
.



Relevant Pages

  • Re: Reading a Java webservice with VB.NET
    ... My client created a very simple "Hello World" web service. ... Using the wsdl.exe program on the actual wsdl still did not work. ... > you mentioned an Apache server, but if you are referring to Apache HTTPD, ...
    (microsoft.public.dotnet.framework.webservices)
  • Re: Differences in WSDL between versions of a web service.
    ... Never change the signature of an already released method in a webservice ... It doesn`t mather that your current WSDL is different as before, ... > what effect it might have on my client apps. ... > The original verison's WSDL contains sections for each web service ...
    (microsoft.public.dotnet.framework.aspnet.webservices)
  • Re: C# Web Services - usage by non .net clients?
    ... the only thing you need is the WSDL. ... your web service must conform to the WS-I BSP profile if others ... what if I develop a client in delphi or progress or Java? ... Would it be a client specific format of the Proxy class? ...
    (microsoft.public.dotnet.framework.webservices)
  • How do you transparently implement the same web service (WSDL) with java axis and .NET ?
    ... When I have tried to generate java and C# servers/clients from the same ... WSDL as described further below, these are the results I have been able ... When I try to invoke a C# web service with a java axis client I get the ... ..NET that are supporting the same WSDL and to be able to reuse client ...
    (microsoft.public.dotnet.framework.aspnet.webservices)
  • RE: Binding a WSDL file to a web service class
    ... below is the simplified example of my web service and the ... complextype I'm trying to pass in as parameter. ... The WSDL and XSD files were ... > designing the WSDL and separating the data type definitions into XSD ...
    (microsoft.public.dotnet.framework.aspnet.webservices)