C++ qt-soap客户端&x2B;ASP.net Web服务

C++ qt-soap客户端&x2B;ASP.net Web服务,c++,asp.net,qt,web-services,soap,C++,Asp.net,Qt,Web Services,Soap,我正在使用基于表单的身份验证为ASP.NET web服务编写Qt客户端 该服务包括3种方法: 登录(用户,通行证) Helloworld()-此方法返回有关已验证用户的信息 Logout() 使用CookieContainer在.net客户机上一切正常 问题从HelloWorld()方法开始。它返回null,因为我无法访问服务器会话 我正在做以下工作: 从Login()请求的响应中,我得到了发送到客户端的cookies: QNetworkAccessManager*manager=http.

我正在使用基于表单的身份验证为ASP.NET web服务编写Qt客户端

该服务包括3种方法:

  • 登录(用户,通行证)
  • Helloworld()
    -此方法返回有关已验证用户的信息
  • Logout()
使用
CookieContainer
在.net客户机上一切正常

问题从HelloWorld()方法开始。它返回null,因为我无法访问服务器会话

我正在做以下工作:

从Login()请求的响应中,我得到了发送到客户端的cookies:

QNetworkAccessManager*manager=http.networkAccessManager();
cookie=manager->cookieJar();
当发送HelloWorld方法I的第二个soaprequest时,添加这些cookie 要使用QtSoapHttpTransport http:

http.networkAccessManager()->setCookieJar(cookie)
但来自服务器的请求是空的

我进一步进行了调查,并监控了从Qt客户端和.NET客户端到服务器的HTTP流量

两个SOAP请求的HTTP标头不同:

这是来自.NET客户端的请求

POST/test/service1.asmx HTTP/1.1
用户代理:Mozilla/4.0(兼容;MSIE 6.0;MS Web服务客户端协议2.0.50727.3053)
VsDebuggerCausalityData:uIDPoyhZznNkbItPkJSR3EA+ZEIAAAAAAAUKPE7URDUE6NMHNT8F UQEQCQBMLX0ZXCM65YW4ZPBKUACQA
内容类型:text/xml;字符集=utf-8
SOAPAction:“http://localhost/test/HelloWorld"
主机:本地主机:8080
Cookie:MyAuthenCookie=DC7620DA79E080FECA37AC6866BF2690D57 B37443506F0D7EEA9DF20982736089D80D37E1B121D73EE44 766BDAE16BA3B30E8B95ADB1252AB00A7670930ACDC87CF9 F26744B7E9E3EB7FBB3812997
内容长度:291
预期:100人继续
这是来自Qt SOAP客户端的请求:

POST/test/Service1.asmx HTTP/1.1
内容类型:text/xml;字符集=utf-8
SOAPAction:http://localhost/test/HelloWorld
内容长度:350
Cookie:MyAuthenCookie=9AFB2B2B22EE78D19DFD52BD2193A3D71627C F703C15E4354E43CC2F31AECBDFFAD09176AA45F33B35C3C3 73891FE994580E8EE70FD4D01507670743138E74E152CFF4 EB3C37D90D3A0E272A804C3
连接:保持活力
接受编码:gzip
用户代理:Mozilla/5.0
主机:本地主机:8080
有没有人知道问题出在哪里,并想办法解决

如何在
QtSoapHttpTransport
对象中修改HTTP POST请求的头,使其与.NET请求相同

提前谢谢大家,,
丹尼

您正在运行IIS还是ASP.NET开发服务器

我能够重新创建一个类似的问题,即使用ASP.NET Development server一切正常,但在IIS下会话为空

需要注意的一点是,当您调用启用会话的服务时,您应该看到在响应头中设置了ASP.NET_SessionId

Set-Cookie: ASP.NET_SessionId=5vxqwy45waoqma45lbbozj45; path=/; HttpOnly Set-Cookie: MyAuthenCookie=510969D70201B358F8B0BBEEE7E79316B7ABCCC74312B0BD678DA4BE90E5C51CD6E7CDCA486DDB41BCBF489DB7280B3B979FD70B78D7F63B03C33431ADDAFDCA; expires=Mon, 07-Dec-2009 06:41:04 GMT; path=/; HttpOnly 设置Cookie:ASP.NET_SessionId=5vxqwy45waoqma45lbbozj45;路径=/;HttpOnly 设置Cookie:MyAuthenCookie=510969D70201B358F8B0BBEE7E79316B7ABCCC74312B0BD678DA4BE90C51CD6E7CDCA486DDB41BCBF489DB7280B3B979FD70B78D7F63B03C3343ADDAFDCA;expires=周一,07-Dec-2009 06:41:04 GMT;路径=/;HttpOnly 为了让会话在IIS下工作,我必须将以下内容添加到system.web下的web.config中:

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


因此,来自Qt soap客户端的请求可以调用HelloWorld webmethod——问题是在HelloWorld内部您无法访问会话?是的。尽管看起来像是用正确的cookie发送SOAP请求(您可以从HTTP头中看到),但我仍然无法访问会话并从中检索信息。向你问好,丹尼。