时发现抱歉的答案我试图连接到需要通过代理进行用户名/密码验证的外部Web服务。我正在使用Visual Studio Express 2008生成服务参考
我已经使用Web参考连接到相同的
webservice。我们只需设置一个超时时间较长
,因为完成该过程需要很长时间。
我已连接到另一个不需要Web服务的
用户名/密码身份验证
,并具有生成的服务参考
和一些设置以使其通过
代理。
所以我的想法是
引用此参考,将其指向正确的Web服务并添加
身份验证。
配置我使用时没有安全性:
<?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>
我得到以下错误:
绑定CustomBinding.http://tempuri.org/合同AreaWebServiceSoap.AreaWebServices配置有一种验证模式,该模式要求具有完整性和机密性的传输级别。运输工具无法提供完整性和机密性。
很抱歉,在键入此问题时,我偶然发现了答案。我仍然认为人们可能对此感兴趣,并且仍然欢迎所有评论和想法。因此,我将把这个问题留在这里,使其成为社区并亲自发布答案。
#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 楼
这是无需代理即可连接的方法:http://blog.bodurov.com/Create-a-WCF-client-for-asmx-web-service-without-using-web-代理
评论
谢谢。不错,
–KeesDijk
09年1月1日上午10:55