Сеансы ColdFusion и .Net

Веб-приложения обычно имеют клиентскую и серверную стороны, тогда как в моем конкретном сценарии у нас есть клиентская сторона и две серверные технологии, использующие веб-службы для выполнения операций и отправки запросов.

Хотя это и не имеет отношения к основной проблеме, причина такой установки просто в том, что наши настольные приложения используют .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 и обновлю свои выводы.


person MPaul    schedule 15.09.2016    source источник


Ответы (1)


Решение такое же простое, как включение файлов cookie в веб-службе.

Application.UserWebService.setMaintainSession(true);
person MPaul    schedule 20.09.2016