【发布时间】:2016-09-23 06:53:24
【问题描述】:
当通过 ColdFusion 调用 SOAP Web 服务时,我基本上想将 ASP.NET_SessionId cookie 添加到我的 HTTP 请求标头中。
Web服务注册在ColdFusion中Application.cfc组件的OnApplicationStart函数中。
<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>
我的网络服务是这样调用的:
<cfset Result = "#Application.UserWebService.SomeFunction("1", "DATA")#">
为了让 .Net 服务器(Web 服务所在的位置)记住我的会话状态,我必须在 HTTP 请求标头中传递 ASP.NET_SessionId cookie,但不知道这在 ColdFusion 中是否可行。
我已经研究了几个小时,但目前还没有任何结果,那么有没有人成功地完成了这个?
【问题讨论】:
-
这是在 cfhttp 中设置 cookie 的方式。
<cfhttpparam type="cookie" name="NET_SessionId" value="??">。但我不知道从哪里获得 .NET 值。您是否尝试过使用<cfdump var="#cgi#">浏览 cgi 范围? -
澄清一下,这里的建议是尝试使用
cfhttp而不是createObject()来使用网络服务。在某些情况下,它提供了更大的灵活性。有关如何跨 http 请求提取 cookie 和维护会话的详细信息,请参阅此线程:bennadel.com/blog/… -
@Leigh - 他正在寻找 .NET 会话 ID,而不是 CF。但我仍然同意你的看法。 cookie.CFID 或 cookie.JSESSIONID 可能更好用。
-
@Jules - 是的,我知道 ;-) .. 但我认为你误解了我的建议。
-
@Jules 回答您的第一条评论,我从
GetHttpRequestData().Headers.Cookie检索ASP.NET_SessionIdcookie 并将其拆分为一个数组。虽然不是最理想的方法,但这允许我检索 .Net 返回的 cookie,以便识别所有后续请求的正确 SessionState 实例。
标签: web-services cookies coldfusion httprequest coldfusion-9