我已经创建了一个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";
答案 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";