Groups | Blog | Home
all groups > dotnet web services > march 2006 >

dotnet web services : Desperate SProxy problem consuming an ASP.NET Web Service


quortex NO[at]SPAM hotmail.com
3/15/2006 1:59:06 PM
Hi all,

I have written a web service using the .net framework 2 and Visual
Studio 2005. I consume the managed service by native C++ using the "add
web reference" feature. This obviously shells out sproxy.exe to
generate the proxy code.

All well and good despite the fact sproxy seems seriously in need of an
update and from what i can gather on other threads possible not going
to. I am in a situation where I cannot use C++/CLI and the native
support seems present but poor quality.

My problem is that I use SoapHeaders to pass in authentication data.
This is fine using the managed generated proxy but the native proxy
simply contains an empty structure with the name of the soapheader. It
contains no properties.

I have tried pretty much everything i can think of. Evidently sproxy
supports soap headers but I cannot even get them to work with simple
test code. Has anybody else had any luck? I guess this may be down to
the fact that wsdl.exe uses newer versions of the web services file
formats and protocols than sproxy supports.

Any help would be appreciated.

Kind Regards,
Mark Everett
quortex NO[at]SPAM hotmail.com
3/16/2006 7:11:38 AM
Hi again,

As an example if you run this through sproxy.exe /wsdl the generated
output includes a blank header. This is so simple and I cannot see
anything wrong with the markup. I have stripped a lot of the additional
wsdl output from the .asmx?wsdl resulting in the following:

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://tempuri.org/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<wsdl:types>
<s:schema elementFormDefault="qualified"
targetNamespace="http://tempuri.org/">
<s:element name="HelloWorld">
<s:complexType />
</s:element>
<s:element name="HelloWorldResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1"
name="HelloWorldResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>

<s:element name="TestHeader" type="tns:TestHeader" />
<s:complexType name="TestHeader">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Test1"
type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Test2"
type="s:string" />
</s:sequence>
</s:complexType>

</s:schema>
</wsdl:types>

<wsdl:message name="HelloWorldSoapIn">
<wsdl:part name="parameters" element="tns:HelloWorld" />
</wsdl:message>
<wsdl:message name="HelloWorldSoapOut">
<wsdl:part name="parameters" element="tns:HelloWorldResponse" />
</wsdl:message>
<wsdl:message name="HelloWorldTestHeader">
<wsdl:part name="TestHeader" element="tns:TestHeader" />
</wsdl:message>

<wsdl:portType name="ServiceSoap">
<wsdl:operation name="HelloWorld">
<wsdl:input message="tns:HelloWorldSoapIn" />
<wsdl:output message="tns:HelloWorldSoapOut" />
</wsdl:operation>
</wsdl:portType>

<wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="HelloWorld">
<soap:operation soapAction="http://tempuri.org/HelloWorld"
style="document" />
<wsdl:input>
<soap:body use="literal" />
<soap:header message="tns:HelloWorldTestHeader"
part="TestHeader" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="Service">
<wsdl:port name="ServiceSoap" binding="tns:ServiceSoap">
<soap:address
location="http://localhost:3693/simpleService/Service.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Kind Regards,
Mark
quortex NO[at]SPAM hotmail.com
3/22/2006 10:08:45 AM
Hi all,

The solution to this problem was to trick sproxy into outputting the
type data by creating a dummy method which uses the header type e.g.

[Web Method]
public AuthHeader Dumm(){ return null; }

Cheers,
Mark
AddThis Social Bookmark Button