【问题标题】:Difference in authentication of WCF Channel Factory vs Service ReferenceWCF 通道工厂与服务参考的身份验证差异
【发布时间】:2013-09-21 08:15:43
【问题描述】:

我正在使用下面描述的 2 种方式在 WCF 服务中使用第 3 方 https Web 服务。

  1. 使用服务参考

    ServiceClient client=new ServiceClient();
    client.ClientCredentials.UserName.UserName ="xxx";
    client.ClientCredentials.UserName.Password = "pwd";
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain,                       sslPolicyErrors) => true;
    ServiceResponse response=client.GetData();
    

2.使用通道工厂

  ChannelFactory<IService> client = new ChannelFactory<IService>(binding, address);
  var proxy = client.CreateChannel();
  client.Credentials.UserName.UserName ="xxx";
  client.Credentials.UserName.Password ="pwd";
  ServiceResponse response=client.GetData();

我能够使用第一种方法传递安全凭据,并且我能够从第 3 方 Web 服务获取响应。但是当我使用第二种方法时我无法获得响应。我可以看到用户名、密码是使用第一种方法添加到外发 SOAP 消息的安全标头中的,而第二种方法则没有。如果有人可以在这里提出一些关于通道工厂方法的建议,我会很高兴。

【问题讨论】:

  • 这两者之间的绑定可能有区别?
  • 这两种方法我都使用 WSHttpBinding。
  • 您是否检查了绑定的安全参数?
  • 是的,我检查了绑定的参数。

标签: c# wcf


【解决方案1】:

问题在于您在分配凭据时 - 在您当前的代码中,您在创建工厂后创建代理,然后然后将凭据分配给工厂。但这对创建的频道没有影响:

ChannelFactory<IService> client = new ChannelFactory<IService>(binding, address);
var proxy = client.CreateChannel();

client.Credentials.UserName.UserName ="xxx";
client.Credentials.UserName.Password ="pwd";

var proxyIChannel 的一个实现 - 在工厂 (client) 上设置凭据对已经创建的通道没有影响 - 只是以后创建的通道。

尝试设置凭据并然后调用CreateChannel()

ChannelFactory<IService> client = new ChannelFactory<IService>(binding, address);
client.Credentials.UserName.UserName ="xxx";
client.Credentials.UserName.Password ="pwd";

var proxy = client.CreateChannel();
ServiceResponse response=client.GetData();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多