WCF客户端与多个网络接口的行为不一致

时间:2017-04-10 15:28:12

标签: c# .net wcf networking proxy

我有如下所示的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之间的相同点和不同点:

  1. A和B都是Windows Server 2012 R2有多个网络接口。每个人都有一个连接到互联网的接口(以便到达相关服务)。
  2. 当在机器A上运行时,一切都按预期工作,我得到了预期的响应(&#34;牛说&#39; moo&#39;&#34;)在客户端。
  3. 在机器B上运行时,我会遇到不同的行为:
    1. 通过网络浏览器(firefox),我可以通过在地址栏中构建请求来获取服务。我可以在外部网络接口上看到请求。一切都如上面2所示。
    2. 通过应用程序(即上面的代码),我得到了下面的例外以及更多,当在wireshark中查看请求时,它不会进入外部网络接口。例外的是,在该网络接口上有一个代理,代理拒绝请求(X-Squid-Error -> ERR_ACCESS_DENIED 0)。
  4. 例外:

    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上了解这种情况的建议/提示。

2 个答案:

答案 0 :(得分:0)

尝试在配置文件中使用此代码段,这样您就可以使用默认凭据在代理服务器中进行身份验证。

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

答案 1 :(得分:0)

默认情况下,绑定试图在机器B上寻找默认代理设置。添加以下绑定配置解决了问题:

b.UseDefaultWebProxy = false;