我正在研究SalesForce和BizTalk Server 2010之间的集成场景。我已阅读以下博客
http://soa-thoughts.blogspot.com.au/2010/08/biztalk-salesforce-and-msmq-part-i.html
http://soa-thoughts.blogspot.com.au/2010/08/biztalk-salesforce-and-msmq-part-ii.html
我将sessionId设置为消息分配形状,如帖子中所述:
SfdcMessage(WCF.Headers) = "<headers><SessionHeader><sessionId>00DK0000005Du2o!AREAQLnrXpVFRAAgwT_Z7iaK0do1IltgHqDLyDfLhbkUGqvFMvzNURdgRtKdPc47cO9sZpOPJ0x8q496vQJsXKGrXt4BcdLW</sessionId></SessionHeader></headers>";
但是,当我的发送端口调用SalesForce自定义Web服务时,我收到以下错误
在发送端口“WcfSendPort_SP”上发送到URI https://abc.xyz的适配器“WCF-BasicHttp”的消息被暂停。
错误详细信息:System.ServiceModel.FaultException:sf:INVALID_SESSION_IDINVALID_SESSION_ID:在SessionHeader中找到无效的会话ID:非法会话
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult result)
我做了更多研究并发现了这些帖子:
有没有人遇到过这个问题?
感谢任何帮助。
干杯,
答案 0 :(得分:4)
有关此事的几件事:
我在我的问题中提到的博客文章太旧了,所以superfell是正确的,因为名称空间需要添加到SessionHeader中,这里也提到了:http://boards.developerforce.com/t5/General-Development/INVALID-SESSION-ID-Invalid-Session-ID-found-in-SessionHeader/td-p/200705 “你的SessionHeader和soap标头中的sessionId元素不在任何名称空间中,它们需要在WSDL定义的xml namesapce中。较新的API端点对此更为严格。“
一位朋友向我指出了“Microsoft BizTalk 2010:业务系统集成线”一书,其中作者写道:“不要忘记在SessionHeader节点上放置命名空间,因为Salesforce.com API是严格的如果命名空间丢失,将返回无效的令牌消息。“在书中,SOAP标头的正确格式表示为:
SFDC_QueryRequest(WCF.Headers) = "<headers><SessionHeader xmlns='urn:enterprise.soap.sforce.com'><sessionId>" + Chapter10_SFDC.TokenManager.TokenManager.SessionId + "</sessionId></SessionHeader></headers>";
基本上我错过了namesace xmlns ='urn:enterprise.soap.sforce.com'。
同样在配置发送端口时,请确保导入自定义绑定* _Custom.BindingInfo.xml而不是.BindingInfo.xml,否则您仍会遇到sessionId问题。
干杯。