【问题标题】:Connecting to an asmx webservice with WCF through a proxy通过代理使用 WCF 连接到 asmx Web 服务
【发布时间】:2008-11-14 09:26:35
【问题描述】:

抱歉,打字时找到答案

我正在尝试连接到需要通过代理进行用户名/密码身份验证的外部 Web 服务。我正在使用 Visual Studio Express 2008 生成服务参考

  • 我已经连接到同一个 使用网络参考的网络服务。我们 只需要设置一个更大的超时时间 因为需要很长时间才能 结束。
  • 我已连接到另一个 不需要的网络服务 用户名/密码认证 带有生成的服务参考 和一些设置来让它通过 代理。

所以我的想法是 拿这个参考,把它指向 正确的网络服务并添加 身份验证。

我使用的没有安全性的配置:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.net>
        <defaultProxy useDefaultCredentials="true">
          <proxy bypassonlocal="False" proxyaddress="http://***.***.****:80" />
        </defaultProxy>
      </system.net>
        <system.serviceModel>
          <bindings>
            <customBinding>
              <binding name="AreaWebServiceSoap12">
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                    messageVersion="Soap12" writeEncoding="utf-8">
                  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </textMessageEncoding>            
                <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                    maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
                    bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                    realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                    useDefaultWebProxy="true" />            
              </binding>
            </customBinding>
          </bindings>
          <client>
            <endpoint address="http://www.****.*****.****.com/samplewebservice/service.asmx"
                    binding="customBinding" bindingConfiguration="AreaWebServiceSoap12"
                    contract="ServiceReference1.ServiceSoap" name="ServiceSoap" />
            </client>
        </system.serviceModel>
    </configuration>

我在身份验证调用中添加了以下代码:

static void Main(string[] args)
{
  ServiceSoapClient s = new ServiceSoapClient();
  s.ClientCredentials.UserName.UserName = @"username";
  s.ClientCredentials.UserName.Password = @"password";

  Service.RawGpsData[] result = s.GetRawGpsData(0);
  Console.WriteLine(String.Format("done:{0}",result.Length));
  Console.ReadLine();
}

仅使用此设置会按预期出现错误:

HTTP 请求未经客户端身份验证方案匿名授权。收到来自服务器的身份验证标头,是 NTLM。

现在我迷路了,开始尝试一些愚蠢的事情,因为我刚刚开始使用 WCF。

当我将以下部分添加到配置中时

 <security authenticationMode="UserNameOverTransport"></security>

我收到以下错误:

为合约AreaWebServiceSoap.AreaWebServices 的绑定CustomBinding.http://tempuri.org/ 配置了一种验证模式,该验证模式需要具有完整性和机密性的传输级别。传输无法提供完整性和机密性。

抱歉,在输入这​​个问题时,我自己偶然发现了答案。我仍然认为人们可能对此感兴趣,并且仍然欢迎所有 cmets 和想法。因此,我将把问题留在这里,并将其设为社区并自己发布答案。

【问题讨论】:

    标签: c# wcf authentication proxy asmx


    【解决方案1】:

    将绑定更改为:

    <?xml version="1.0" encoding="utf-8" ?>
    <customBinding>
                <binding name="AreaWebServiceSoap12" closeTimeout="00:01:00" openTimeout="00:10:00"
                        receiveTimeout="00:20:00" sendTimeout="00:05:00">
                    <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                      messageVersion="Soap12" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                  </textMessageEncoding>              
                  <httpTransport manualAddressing="false" maxBufferPoolSize="524288"  
                      maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Ntlm"
                      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                      keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                      realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                      useDefaultWebProxy="true" />              
                </binding>
              </customBinding>
    

    所以设置 authenticationScheme="Ntlm"

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 谢谢。这是一个很好的补充,
      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多