мыльный клиент qt + веб-сервис ASP.net - PullRequest
0 голосов
/ 05 декабря 2009

Я пишу Qt-клиент для веб-службы ASP.NET с аутентификацией на основе FORMS.

Услуга состоит из 3 способов:

  • Login(user,pass)
  • Helloworld() - этот метод возвращает информацию об аутентифицированном пользователе.
  • Logout()

Все работает нормально на клиенте dot.net с CookieContainer.

Проблема начинается с методов HelloWorld (). он возвращает ноль, потому что я не могу получить доступ к сеансу сервера.

Я делаю следующее:

из ответа на запрос Login () я получаю куки, которые отправляются клиенту:

QNetworkAccessManager *manager = http.networkAccessManager();
cookie = manager->cookieJar();

При отправке второго мыла-запроса для метода HelloWorld я добавил эти куки в QtSoapHttpTransport http:

http.networkAccessManager()->setCookieJar(cookie) 

но запрос от сервера пуст.

Я продолжил свое расследование и отслеживал HTTP-трафик, поступающий на сервер из Qt-клиента и .NET-клиента.

Заголовок HTTP для обоих запросов SOAP различен:

Это запрос от клиента .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 

и это запрос от SOAP-клиента 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

Кто-нибудь знает, что может быть проблемой, и как ее решить?

Как изменить заголовки для HTTP-запроса POST в QtSoapHttpTransport объекте, чтобы он совпадал с запросом .NET?

Заранее спасибо, Дэнни.

1 Ответ

1 голос
/ 05 декабря 2009

Вы используете IIS или сервер разработки ASP.NET?

Мне удалось воссоздать аналогичную проблему, когда все работало нормально с использованием сервера разработки ASP.NET, но в 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

Чтобы сеансы работали под IIS, мне нужно было добавить следующее в web.config под system.web:

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

Это было под Windows 2003.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...