我是服务参考资料的新手,所以我可能需要简单的解释。
我有一个WSDL:
https://test.servicebench.com/servicebenchv5/services/CRMServiceOrderService?wsdl
我通过MVS2013在项目中添加了服务参考,没有任何问题。
这是自动生成的app.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CRMServiceOrderBinding">
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint
address="https://test.servicebench.com/servicebenchv5/services/CRMServiceOrderService"
binding="customBinding"
bindingConfiguration="CRMServiceOrderBinding"
contract="ServiceBenchReference.CRMServiceOrderPortType"
name="CRMServiceOrderPort" />
</client>
</system.serviceModel>
</configuration>
现在,我尝试向服务器发出的每个请求都回复了我:“未经授权”。
我很确定这是因为我没有在SOAP请求标头中传递所需的凭据。
我需要传递3个凭据(或信息?):ServiceBenchID,UserID和密码。
我尝试过使用:
CRMServiceOrderPortTypeClient ServiceOrder = new CRMServiceOrderPortTypeClient();
ServiceOrder.ClientCredentials.UserName.UserName = myUserID;
ServiceOrder.ClientCredentials.UserName.password = myPassword;
但它不起作用。我通过Fiddler检查了请求,但我没有看到标题中传递的凭据。
所以这是我的问题:如何才能正确地在标题中传递这3个自定义凭据信息? (所以我从服务器得到回复)
答案 0 :(得分:1)
经过几个小时的搜索,我找到了合适的解决方案!
感谢Thorarin的代码,
How can I pass a username/password in the header to a SOAP WCF Service
似乎在app.config文件中使用自定义绑定会强制您手动添加安全元素。我不认为这是最好的方法,但它的工作方式就是这样。