2009-12-05 9 views
0

J'écris un client Qt pour le service Web ASP.NET avec authentification basée sur FORMS. Le service se compose de 3 méthodes: Connexion (utilisateur, passe) Helloworld() - cette méthode renvoie des informations sur l'utilisateur averti. Déconnexion()qt soap client + Service Web ASP.net

Tout fonctionne correctement sur le client dot.net avec CookieContainer.

Le problème commence avec les méthodes HelloWorld(). il renvoie null beause je ne peux pas accéder à la session du serveur.

que je fais ce qui suit:

de la réponse de Login() demande i reçois les biscuits qui sont envoyés au client: QNetworkAccessManager * gestionnaire = http.networkAccessManager(); cookie = manager-> cookieJar();

Lors de l'envoi de la deuxième SOAPRequest pour la méthode HelloWorld j'ajouter ces cookies à QtSoapHttpTransport http:

http.networkAccessManager() -> setCookieJar (cookies)

mais la demande qui va du serveur est vide .

Je suis allé plus loin avec mon enquête et le trafic HTTP surveillé arrivant au serveur de Qt cleint et client .NET.

L'en-tête HTTP pour les requêtes SOAP sont diffeent:

Ceci est demande à venir du client .NET

 
POST /test/service1.asmx HTTP/1.1 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3053) 
VsDebuggerCausalityData: uIDPoyhZznNkbItPkJSR3EA+zEIAAAAAUkpe7URduE6nmhnT8f uQeqCQBMlX0zxCm65yW4ZPBkUACQAA 
Content-Type: text/xml; charset=utf-8 
SOAPAction: " http://localhost/test/HelloWorld " 
Host: localhost:8080 
Cookie: MyAuthenCookie=DC7620DA79E080FECA37AC6866BF2690D57 B37443506F0D7EEA9DF209827360894D80D37E1B121D73EE44 766BDAEE16BA3FB0E8B95ADB1252AB00A76706930ACDC87CF9 F26744B7E9E3EB7FBB3812997 
Content-Length: 291 
Expect: 100-continue 

et c'est demande provenant du client de savon Qt:

 
POST /test/Service1.asmx HTTP/1.1 
Content-Type: text/xml;charset=utf-8 
SOAPAction: http://localhost/test/HelloWorld 
Content-Length: 350 
Cookie: MyAuthenCookie=9AFB2B22EE78D19DFD52BD2193A3D71627C F7303C15E4354E43CC2F31AECBDFFAD09176AA45F33B35C3C3 73891F1FE994580E8EE70FD4D01507670743138E74E152CFF4 EB3C37D90D3A7A0E272A804C3 
Connection: Keep-Alive 
Accept-Encoding: gzip 
User-Agent: Mozilla/5.0 
Host: localhost:8080 

Est-ce que tout corps ont une idée de ce qui pourrait être le problème et houe pour le résoudre?

Comment puis-je modifier les en-têtes pour la requête HTTP POST dans l'objet QtSoapHttpTransport afin de le rendre identique à la requête .NET? Merci d'avance, Danny.

+0

Ainsi, la demande de Qt soap client peut appeler votre webmethod HelloWorld - le problème est que dans HelloWorld vous ne pouvez pas accéder à la session? –

+0

Oui. Bien que cela ressemble à l'envoi d'une requête SOAP avec un cookie correct (vous pouvez le voir depuis l'en-tête HTTP), je ne peux toujours pas accéder à la session et récupérer des informations à partir de là. Cordialement, Danny. –

Répondre

1

Exécutez-vous IIS ou le serveur de développement ASP.NET?

J'ai été capable de recréer un problème similaire où tout fonctionnait correctement avec le serveur de développement ASP.NET mais sous IIS la session était nulle.

Une chose à rechercher est lorsque vous appelez le service de session est activé, vous devriez voir le ASP.NET_SessionId étant défini dans les en-têtes de réponse

 
Set-Cookie: ASP.NET_SessionId=5vxqwy45waoqma45lbbozj45; path=/; HttpOnly 
Set-Cookie: MyAuthenCookie=510969D70201B358F8B0BBEEE7E79316B7ABCCC74312B0BD678DA4BE90E5C51CD6E7CDCA486DDB41BCBF489DB7280B3B979FD70B78D7F63B03C33431ADDAFDCA; expires=Mon, 07-Dec-2009 06:41:04 GMT; path=/; HttpOnly 

Pour obtenir des séances de travail sous IIS, je devais ajouter ce qui suit à web.config sous system.web:

<sessionState mode="InProc" cookieless="false" timeout="20" /> 
<httpModules> 
    <add name="Session" type="System.Web.SessionState.SessionStateModule" 
</httpModules> 

C'était sous Windows 2003.

+0

Salut, Oui. bien sûr, et cela fonctionne parfaitement à partir du client dotNET –