我有如下所示的WCF客户端:
public static string Execute(string a)
{
WebHttpBinding b = new WebHttpBinding();
b.Security.Mode = WebHttpSecurityMode.Transport;
WebChannelFactory<IAnimalService> f = new WebChannelFactory<IAnimalService>(b, new Uri(a));
f.Endpoint.Behaviors.Add(new WebHttpBehavior());
IWebService client = f.CreateChannel();
return client.SayHello("moo");
}
我正在测试客户端(在控制台主机中)与来自2台不同计算机(A,B)的对应服务,并得到不同的结果。以下是A和B之间的相同点和不同点:
X-Squid-Error -> ERR_ACCESS_DENIED 0
)。例外:
Unhandled Exception: System.ServiceModel.Security.MessageSecurityException: The HTTP request was forbidden with client authentication scheme
'Anonymous'. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- End of inner exception stack trace ---
我还咨询了机器B上的路由表,它显示请求应该已经在外部网络接口上。我假设TCP-IP堆栈的下层会查询内部路由表,以便将数据包转发到正确的(网络)介质。
所以,我想知道是否有人知道如何让我的客户在机器B上选择正确的界面。我不知道如何进一步解决问题。因此,欢迎任何关于如何在机器B上了解这种情况的建议/提示。
答案 0 :(得分:0)
尝试在配置文件中使用此代码段,这样您就可以使用默认凭据在代理服务器中进行身份验证。
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
答案 1 :(得分:0)
默认情况下,绑定试图在机器B上寻找默认代理设置。添加以下绑定配置解决了问题:
b.UseDefaultWebProxy = false;