通过代理连接到WCF服务(.svc)(使用用户名/密码)

时间:2011-06-17 08:38:14

标签: c# wcf wcf-security

我已经创建了一个WCF服务。我称之为:

ServiceClient client = new ServiceClient ();
client.MyMethod();

到目前为止在我的机器上非常好。

现在我已将它部署在我们的DMZ中(无论是什么),我可以通过外部URL调用它(因此我的机器的请求会发送到Internet,然后转到我们的数据中心)。

但是,我们通过代理连接到Internet。我不确定它是如何工作的,但如果我想访问Stack Overflow站点,我必须在Internet Explorer的连接,LAN设置部分输入代理服务器。

当我不更改代码时,我收到此错误:

  

远程服务器返回了一个   意外回应:(407)代理   需要身份验证(ISA   服务器需要授权   满足要求。访问网络   代理筛选器被拒绝。 )。

谷歌搜索后,我发现了这段代码,但它给我留下了同样的错误。

  var b = client.Endpoint.Binding as System.ServiceModel.WSHttpBinding;
            b.ProxyAddress = new Uri("http://OURADDRESS.intern:8080");     
            b.BypassProxyOnLocal = false;     
            b.UseDefaultWebProxy = false;
            client.ClientCredentials.UserName.UserName = @"DOMAIN\USERNAME";
            client.ClientCredentials.UserName.Password = "myverysecretpassword";

1 个答案:

答案 0 :(得分:5)

在这种情况下,使用默认代理就足够了:

<configuration>
  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>
  ...
</configuration>

在绑定中,您必须确保使用默认代理(默认情况下应启用):

b.UseDefaultWebProxy = true;

如果手动设置凭据,我相信您的代理需要Windows凭据,因此应该使用它:

client.ClientCredentials.Windows.ClientCredential.UserName = @"DOMAIN\USERNAME";
client.ClientCredentials.Windows.ClientCredential.Password = "myverysecretpassword";