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

Mic*_*hel 2 c# wcf wcf-security

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

ServiceClient client = new ServiceClient ();
client.MyMethod();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

远程服务器返回意外响应:(407)需要代理身份验证(ISA Server需要授权才能完成请求.拒绝访问Web代理筛选器.).

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

  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";
Run Code Online (Sandbox Code Playgroud)

Lad*_*nka 5

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

<configuration>
  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>
  ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

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

b.UseDefaultWebProxy = true;
Run Code Online (Sandbox Code Playgroud)

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

client.ClientCredentials.Windows.ClientCredential.UserName = @"DOMAIN\USERNAME";
client.ClientCredentials.Windows.ClientCredential.Password = "myverysecretpassword";
Run Code Online (Sandbox Code Playgroud)