Веб-приложения обычно имеют клиентскую и серверную стороны, тогда как в моем конкретном сценарии у нас есть клиентская сторона и две серверные технологии, использующие веб-службы для выполнения операций и отправки запросов.
Хотя это и не имеет отношения к основной проблеме, причина такой установки просто в том, что наши настольные приложения используют .Net, тогда как наши веб-приложения используют ColdFusion, и мы медленно переводим серверные процессы на .Net. , используя веб-службы как средство выполнения этих операций, что, несомненно, значительно облегчит переход на полное решение .Net в ближайшем будущем.
Проблема
Проблема заключается в том, что когда я вызываю веб-службу .Net из ColdFusion, .Net, похоже, не сохраняет сеанс за пределами HTTP-запроса.
Однако, если я вызываю ту же веб-службу, используя Ajax с jQuery, сеанс сохраняется после одного HTTP-запроса. (на всех моих страницах)
Веб-сервис зарегистрирован в функции OnApplicationStart
компонента Application.cfc
в Cold Fusion. (Примечание: SoapHeader реализует ws-security)
<cfscript>
objSoapHeader = XmlParse("<wsse:Security mustUnderstand=""true"" xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd""><wsse:UsernameToken><wsse:Username>MY_USERNAME</wsse:Username><wsse:Password>MY_PASSWORD</wsse:Password></wsse:UsernameToken></wsse:Security>");
Application.UserWebService = CreateObject("webservice","MY_URL/UserService.asmx?WSDL");
addSOAPRequestHeader(Application.UserWebService,"","",objSoapHeader,true);
</cfscript>
При вызове той же веб-службы из jQuery заголовок и тело имеют следующую структуру:
var strSoapData = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Header><LanguageHeader xmlns='http://tempuri.org/'><Locale>en-CA</Locale></LanguageHeader></soap:Header><soap:Body>" + strData + "</soap:Body></soap:Envelope>";
Для обработки ws-security
в .Net в файл web.config
помещается следующий код:
<webServices>
<soapExtensionImporterTypes>
<add type="Microsoft.Web.Services3.Description.WseExtensionImporter, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</soapExtensionImporterTypes>
<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</webServices>
Вопрос
После нескольких часов исследований, проб и ошибок, какой следующий шаг я могу предпринять, чтобы определить основную проблему, почему мой сеанс теряется в .Net при вызове веб-службы из Cold Fusion?
ИЗМЕНИТЬ
После небольшого дополнительного исследования я пришел к выводу, что Cold Fusion не сохраняет файл cookie ASP.NET_SessionId
, возможно, файлы cookie все вместе. Я попытаюсь использовать подход без файлов cookie и обновлю свои выводы.