WCF服务调用返回'407 Proxy Authentication Required'

时间:2015-02-17 13:22:06

标签: c# wcf azure proxy

我正在托管一个WCF网络服务(在Azure上),并将WPF桌面应用程序发送给一个客户端(显然)尝试通过代理服务器访问该服务。

服务调用失败,返回

  

远程服务器返回了意外响应:407 Proxy   需要身份验证

客户端app.config文件的ServiceModel部分如下所示:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ILicensing"  closeTimeout="00:00:15" openTimeout="00:00:15"
                 receiveTimeout="00:00:15" sendTimeout="00:00:15" maxReceivedMessageSize="2147483647"
                 maxBufferSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
                        maxNameTableCharCount="2147483647"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="xxxxxxx"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ILicensing"
                contract="Cloud.ILicensing" name="BasicHttpBinding_ILicensing" />
    </client>
</system.serviceModel>

这基本上就是我所知道的。

我想通过修改app.config文件和/或服务的web.config文件来修复此行为(这应该无关紧要,因为无论如何都没有到达服务)。

据我所知,绑定节点有属性useDefaultWebProxy,要求查找系统代理配置并使用它来连接服务。但是,由于默认值为true,我希望将其设置为true显式不会改变任何内容(我猜这基本上是默认值的定义)。

  1. 代理验证失败的原因是什么,考虑到useDefaultWebProxy没有设置,因此它应该是true,因为它是默认值?

  2. 为了解决限制信息问题,如何修改app.config?基本上:我需要知道/询问我的客户端(即代理服务器地址)以及我需要在哪里将信息插入客户端配置文件中?

  3. 如何在本地计算机上设置模拟问题的测试环境?

2 个答案:

答案 0 :(得分:5)

对于 1 2 ,您需要配置System.Net以提供默认代理的默认凭据 - 默认情况下不执行此操作(因为在自动访问互联网的应用程序中隐藏的回调代码会很糟糕。

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

对于 3 ,我不完全确定如何在本地测试,因为您需要一台机器充当代理,这些通常是域控制器类型的机器。您可以使用2个虚拟机进行模拟,但我希望您拥有一台功能强大的机器,而且看起来需要付出很多努力来测试它。

答案 1 :(得分:1)

您可以从代码

执行此操作
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;