gpt4 book ai didi

c# - 通过代理使用 WCF 连接到 asmx web 服务

转载 作者:太空狗 更新时间:2023-10-30 01:12:29 25 4
gpt4 key购买 nike

很抱歉在输入时找到了答案

我正在尝试连接到需要通过代理进行用户名/密码身份验证的外部网络服务。我正在使用 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 请求未经客户端身份验证方案 Anonymous 授权。收到来自服务器的身份验证 header ,是 NTLM。

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

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

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

我收到以下错误:

契约(Contract) AreaWebServiceSoap.AreaWebServices 的绑定(bind) CustomBinding.http://tempuri.org/配置了验证模式,需要具有完整性和 secret 性的传输级别。传输无法提供完整性和 secret 性。

抱歉,我在输入这个问题时偶然发现了答案。我仍然认为人们可能对此感兴趣,仍然欢迎所有评论和想法。所以我会把问题留在这里,让它成为社区并自己发布答案。

最佳答案

将绑定(bind)更改为:

<?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"

关于c# - 通过代理使用 WCF 连接到 asmx web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com