2016-09-15 46 views
1

Web應用程序通常具有客戶端和服務器端,而在我的特定情況下,我們有客戶端和兩種使用Web服務執行操作和發出請求的服務器端技術。ColdFusion和.Net會話

儘管與底層問題無關,但這種設置的原因僅僅是由於我們基於桌面的應用程序使用.Net,而我們的Web應用程序使用ColdFusion,而且我們一直在慢慢地將服務器進程轉換爲.Net,使用Web服務作爲執行這些操作的手段,因此毫無疑問,在不久的將來,將更容易切換到完整的.Net解決方案。

問題

的問題是,當我調用.NET Web服務從ColdFusion的,淨似乎並沒有挽留超越HTTP請求的會話。

但是,如果我使用Ajax和jQuery調用同一個Web服務,會話將保留在一個HTTP請求之外。 (跨越我的所有頁面)

Web服務在Cold Fusion中的Application.cfc組件的OnApplicationStart功能中註冊。 (注: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的相同的web服務中,頭部和主體被構造爲這樣:

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在達網絡下面的代碼被放置在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調用Web服務時丟失?

編輯

多一點的研究後,我相信,冷聚變不保留ASP.NET_SessionId餅乾,曲奇餅也許一起。我會嘗試一種無cookie的方法並更新我的研究結果。

回答

0

解決方案就像在Web服務上啓用cookie一樣簡單。

Application.UserWebService.setMaintainSession(true);