您好,我在设置 SessionHeaderValue 时遇到问题。我的代码基于 c#.Net。登录正常,我在登录结果中收到 serviceUrl 和 sessionId,但无法获取会话标头中设置的会话 ID
这是代码
$uri = "c:\installs\sforce.wsdl"
$username = "username"
$password = "password"
# Proxy
$service = New-WebServiceProxy -Uri $uri -Namespace sforce -UseDefaultCredential
# Login
$loginResult = $service.login($username, $password)
$service.Url = $loginResult.serverUrl
$service.SessionHeaderValue = New-Object sforce.SessionHeader
这是我得到的错误,有点奇怪。
异常设置“SessionHeaderValue”:“无法将类型“sforce.SessionHeader”的“sforce.SessionHeader”值转换为类型“sforce.SessionHeader”。”
我已经玩了几个小时了,但已经没有想法了。
任何帮助表示赞赏。
Anthony
真正的问题是你不能重用$service
。你的实例$service
仅适用于登录,仅此而已。我认为这是由于 New-WebServiceProxy 的工作方式造成的。检查这个小脚本:
$uri = 'file://C:\projects\CRM\SalesForce\Integration\enterprise.xml'
$api = new-webserviceproxy -uri $uri -NameSpace SalesForce
$api.GetType().Module.Assembly.ManifestModule.ScopeName
$api = new-object SalesForce.SforceService.ScopeName
$api.GetType().Module.Assembly.ManifestModule
如果您要运行此脚本(当然您需要替换您自己的 WSDL),您会看到类似这样的内容(DLL 是动态的,因此名称会有所不同):
mhgl0l5w.dll
vzecopaq.dll
请注意,不仅 $api 的对象引用不同,而且 New-WebServiceProxy 创建的动态程序集也不同,这不是您所期望的。这就是你的演员阵容失败的原因;具有相同名称的对象是不同的,因为它们来自不同的动态程序集。我不确定为什么会出现这样的行为 - 如果这是 New-WebServiceProxy 的特性,或者以某种方式存在于 SalesForce 的 WSDL 中。
解决方案实际上非常简单。在 New-WebServiceProxy 生成的命名空间中重新创建服务对象,如下所示:
$uri = "c:\installs\sforce.wsdl"
$username = "username"
$password = "password"
# Proxy
$service = New-WebServiceProxy -Uri $uri -Namespace sforce -UseDefaultCredential
# Login
$loginResult = $service.login($username, $password)
$service = New-Object sforce.SforceService
$service.Url = $loginResult.serverUrl
$service.SessionHeaderValue = New-Object sforce.SessionHeader
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)