Hi Stefan,
I am pasting a wsdl for your reference. Please see the embedded comments.

On the client side, C# needs to see the SessionID element in WSDL so that it
can create member variable SessionID for the service. But Axis does not
generate such a WSDL. Hence you need to modify the WSDL produced by Axis and
manually add the SessionID element. Then you should use the modified WSDL in
Visual Studio. Following is an example of the modified WSDL with the
comments preceding the modifications.

After you show this WSDL to Visual Studio, it will generate the proxy and
you can retreive the Session ID by using authenticationService.SessionID.
Hope this helps.

Warm Regards,
Abhinav Maheshwari



<wsdl:definitions
targetNamespace="http://tornado/portfolioip/services/AuthenticationService";
xmlns:apachesoap="http://xml.apache.org/xml-soap";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:tns2="http://pair.biz.portfolioip.its.com";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:tns1="http://exception.services.portfolioip.its.com";
xmlns:impl="http://tornado/portfolioip/services/AuthenticationService";
xmlns:intf="http://tornado/portfolioip/services/AuthenticationService";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:fip="http://foundationip.com/services";
xmlns="http://schemas.xmlsoap.org/wsdl/";><wsdl:types><schema
xmlns="http://www.w3.org/2001/XMLSchema";
targetNamespace="http://exception.services.portfolioip.its.com";><import
namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType
name="InvalidUsernameException"><sequence><element name="message"
nillable="true" type="xsd:string"/></sequence></complexType><complexType
name="InvalidPasswordException"><sequence><element name="message"
nillable="true" type="xsd:string"/></sequence></complexType></schema><schema
xmlns="http://www.w3.org/2001/XMLSchema";
targetNamespace="http://pair.biz.portfolioip.its.com";><import
namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType
name="AuthenticationFacadeException"><sequence><element name="message"
nillable="true" type="xsd:string"/></sequence></complexType></schema>

<!-- added session ID element. The namespace must match the namespace in
SessionHandler -->
     <schema xmlns="http://www.w3.org/2001/XMLSchema";
targetNamespace="http://foundationip.com/services";>
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"; />
         <complexType name="SessionID">
           <sequence>
             <element name="ID" minOccurs="1" maxOccurs="1"
type="xsd:string" />
           </sequence>
         </complexType>
     </schema>
<!-- end of session ID element -->

</wsdl:types>

  <!-- added a header for session -->
  <wsdl:message name="sessionHeader">
    <wsdl:part name="SessionID" type="fip:SessionID" />
  </wsdl:message>
  <!-- end of session header -->

  <wsdl:message name="authenticateResponse">
  </wsdl:message>
  <wsdl:message name="authenticateRequest">
    <wsdl:part name="userName" type="xsd:string"/>
    <wsdl:part name="password" type="xsd:string"/>
  </wsdl:message>
  <wsdl:message name="InvalidUsernameException">
    <wsdl:part name="fault" type="tns1:InvalidUsernameException"/>
  </wsdl:message>
  <wsdl:message name="AuthenticationFacadeException">
    <wsdl:part name="fault" type="tns2:AuthenticationFacadeException"/>
  </wsdl:message>
  <wsdl:message name="InvalidPasswordException">
    <wsdl:part name="fault" type="tns1:InvalidPasswordException"/>
  </wsdl:message>
  <wsdl:portType name="AuthenticationService">
    <wsdl:operation name="authenticate" parameterOrder="userName password">
      <wsdl:input name="authenticateRequest"
message="impl:authenticateRequest"/>
      <wsdl:output name="authenticateResponse"
message="impl:authenticateResponse"/>
      <wsdl:fault name="AuthenticationFacadeException"
message="impl:AuthenticationFacadeException"/>
      <wsdl:fault name="InvalidPasswordException"
message="impl:InvalidPasswordException"/>
      <wsdl:fault name="InvalidUsernameException"
message="impl:InvalidUsernameException"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="AuthenticationServiceSoapBinding"
type="impl:AuthenticationService">
    <wsdlsoap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="authenticate">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="authenticateRequest">
        <wsdlsoap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
namespace="http://localhost/portfolioip/services/AuthenticationService"/>
      </wsdl:input>
      <wsdl:output name="authenticateResponse">

        <!-- Authentication service returns a Session ID. If a service needs
a session ID during request, this element should also be present in request
definition -->

        <wsdlsoap:header use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
message="impl:sessionHeader" part="SessionID"  />
        <wsdlsoap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
namespace="http://tornado/portfolioip/services/AuthenticationService"/>
      </wsdl:output>
      <wsdl:fault name="AuthenticationFacadeException">
        <wsdlsoap:fault use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
namespace="http://tornado/portfolioip/services/AuthenticationService"/>
      </wsdl:fault>
      <wsdl:fault name="InvalidPasswordException">
        <wsdlsoap:fault use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
namespace="http://tornado/portfolioip/services/AuthenticationService"/>
      </wsdl:fault>
      <wsdl:fault name="InvalidUsernameException">
        <wsdlsoap:fault use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
namespace="http://tornado/portfolioip/services/AuthenticationService"/>
      </wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="AuthenticationServiceService">
    <wsdl:port name="AuthenticationService"
binding="impl:AuthenticationServiceSoapBinding">
      <wsdlsoap:address
location="http://tornado/portfolioip/services/AuthenticationService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


-----Original Message-----
From: Srinivas Vemula [mailto:[EMAIL PROTECTED]
Sent: Thursday, March 11, 2004 3:29 PM
To: [EMAIL PROTECTED]
Subject: Re: C# Cllient , Axis Server, Session Management


Hi Stefan,


         <complexType name="SessionID">
           <sequence>
             <element name="ID" minOccurs="1" maxOccurs="1"
type="xsd:string" />
           </sequence>
         </complexType>
     </schema>
<!-- end of session ID element -->

</wsdl:types>
See if this works..
srini
Stefano Sambi wrote:

I'm trying to use your SessionHandler to manage session between C# client
and Axis web service but I do not succeed to set the SOAP header in my wsdl.
Can you send me an example of your wsdl? And also how do you manage sessions
in your C# client?

Here it's my changes to wsdl that don't work:
I added the definition of sessionID element in 'Types' section:
<wsdl:types>
  <xsd:schema targetNamespace=http://localhost/axis/services/MyService>
    <xsd:complexType name="Session">
      <xsd:sequence>
        <xsd:element name="sessionID">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="ID" type="xsd:string"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:schema>
</wsdl:types>

I added the definition of soap header message in 'Messages' section:
<wsdl:message name="soapHeader">
    <wsdl:part name="SessionID" type="impl:Session"
xmlns:impl=http://localhost/axis/services/MyService/>
</wsdl:message>

and I added the soap header binding to my operation in 'Binding' section:
<wsdlsoap:header message="impl:soapHeader" part="SessionID" use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; />



Thanks
Stefano

----- Original Message -----
From: "Abhinav Maheshwari" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, February 16, 2004 3:15 PM
Subject: RE: C# Cllient , Axis Server, Session Management



Hi Srinivas,
You need to use the SessionHandler to maintain session information but

there

are problems with using the one supplied with Axis. This is a modified
version of the SessionHandler supplied with Axis which can be used.

Also, you need to manually put the SOAP Header in the WSDL generated by

Axis

so that Visual Studio can generate the code for session variables.

Regards,
Abhinav

-----Original Message-----
From: Srinivas Vemula [mailto:[EMAIL PROTECTED]
Sent: Monday, February 16, 2004 6:30 PM
To: [EMAIL PROTECTED]
Subject: C# Cllient , Axis Server, Session Management


Hi All,
      I am new to using axis. We are trying to communciate from a .NET
C# client. Can any one let me know, how to track sessions in this
scenario? Basically, we would like to put some authorization info in  a
session object as the first call from the client will be for

authentication.

    After that client will call  other Axis (web) services for executing
some more tasks. We would like to check for the authorization
information for subsequent calls from the same client and deny services
if we dont find the relevant information in the session object .
    Any help or pointers to solve this? Thank you all for your help and
time.
srini

--
Srinivas Vemula                          +91 40 23547826- Ext 201
Associate Consultant                     +91 40 23541447 (Fax)
Mensamind                                +91 98497-42720 (Mobile)
Hyderabad
India
http://www.mensamind.com

DISCLAIMER
The information contained in this e-mail is confidential and intended for
the named recipient(s) only. If you are not an intended recipient of this
email you must not copy, distribute or take any further action in reliance
on it. You should delete it and notify the sender immediately.






--
Srinivas Vemula                          +91 40 23547826- Ext 201
Associate Consultant                     +91 40 23541447 (Fax)
Mensamind                                +91 98497-42720 (Mobile)
Hyderabad
India
http://www.mensamind.com

DISCLAIMER
The information contained in this e-mail is confidential and intended for
the named recipient(s) only. If you are not an intended recipient of this
email you must not copy, distribute or take any further action in reliance
on it. You should delete it and notify the sender immediately.

Reply via email to