我希望你能帮助我。我试图让我的客户端WCF调用行为与我正常工作的Web引用完全相同。
网络参考代码:
Dim wsProxy As New Namespace.ServiceName()
wsProxy.Credentials = CredentialCache.DefaultCredentials
wsProxy.CookieContainer = New CookieContainer()
wsProxy.AllowAutoRedirect = True
wsProxy.WebMethod()
美好而简单。在我看来,WCF等价物应该是:
Dim binding As New BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly)
binding.Security.Tranport.ClientCredentialType = HttpClientCredentialType.Windows
Dim wsProxy As New Namespace.ServiceName(binding, New EndpointAddress("..."))
wsProxy.ClientCredentials.Windows.AllowNtlm = False
wsProxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Identification
wsProxy.ChannelFactory.Credentials.Windows.ClientCredential = Net.CredentialCache.DefaultCredentials
wsProxy.WebMethod()
无论我尝试什么,我都无法让WCF等同于进行身份验证。我总是得到:
“HTTP请求未经授权,客户端身份验证方案'Negotiate'。从服务器收到的身份验证标头是'Negotiate,Basic realm =”My Realm“'。
关键标准:
注意:重定向和401由Oracle Access Manager提供 - 但我们知道这里没有什么特别的东西,因为Web引用工作正常。
非常感谢任何帮助!
更新1
感谢您提出的问题 - 在回复diggingforfile时,上面的示例不使用web.config。但是,如果我添加了服务引用,则会设置以下配置:
<basicHttpBinding>
<binding name="SomeBindingName" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxByesPerRead="4096" maxNameTableCharCount="16384"
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
<basicHttpBinding>
<client>
<endpoint address="http://Server/Service"
binding="basicHttpBinding" bindingConfiguration="SomeBindingName"
contract="Namespace.ServiceName" name="SomeEndpointName" />
</client>
如果我试试这个,我得到:
“HTTP请求未经授权使用客户端身份验证方案'Anonymous'。从服务器收到的身份验证标头是'Negotiate,Basic realm =”My Realm“'。