2016-09-15 47 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);