Я пишу 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?
Заранее спасибо,
Дэнни.