Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCFTestClient The HTTP request is unauthorized with client authentication scheme 'Anonymous'

I've created one WCF service and deployed it on Server. When I browse this service it gives me positive response with ?wsdl URL. Now I'm trying to test the service through WCF Test client. It shows proper metadata. But when I try to invoke any of the method from the service it shows me an exception... here are the erro details with stack trace..

The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Negotiate,NTLM'.

Server stack trace:

at
System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response, WebException responseException, HttpChannelFactory factory)
The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Negotiate,NTLM'.

Server stack trace:

at
System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response, WebException responseException, HttpChannelFactory factory)

Client Bindings:

<bindings>     <wsHttpBinding>         <binding name="WSHttpBinding_IServiceMagicService" closeTimeout="00:01:00"             openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"             bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"             maxBufferPoolSize="524288" maxReceivedMessageSize="65536"             messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"             allowCookies="false">             <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"                 maxBytesPerRead="4096" maxNameTableCharCount="16384" />             <reliableSession ordered="true" inactivityTimeout="00:10:00"                 enabled="false" />             <security mode="None">                 <transport clientCredentialType="Windows" proxyCredentialType="None"                     realm="" />                 <message clientCredentialType="Windows" negotiateServiceCredential="true"                     establishSecurityContext="true" />             </security>         </binding>     </wsHttpBinding> </bindings> 

Server Bindings:

<bindings>   <wsHttpBinding>     <binding name="WSHttpBinding_SEOService" closeTimeout="00:10:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="true" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="999524288" maxReceivedMessageSize="655360000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">       <readerQuotas maxDepth="32" maxStringContentLength="900000" maxArrayLength="900000" maxBytesPerRead="900000" maxNameTableCharCount="900000" />       <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />       <security mode="None">         <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />         <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />       </security>     </binding>     <binding name="WSHttpServiceMagicBinding" closeTimeout="00:10:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="true" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="999524288" maxReceivedMessageSize="655360000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">       <readerQuotas maxDepth="32" maxStringContentLength="900000" maxArrayLength="900000" maxBytesPerRead="900000" maxNameTableCharCount="900000"/>       <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>       <security mode="None">         <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>         <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true"/>       </security>     </binding>   </wsHttpBinding> </bindings> 

Client's Client Section:

<client>     <endpoint address="http://hydwebd02.solutions.com/GeoService.Saveology.com/ServiceMagicService.svc"         binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IServiceMagicService"         contract="IServiceMagicService" name="WSHttpBinding_IServiceMagicService" /> </client> 

Server's Services Section:

<services>     <service behaviorConfiguration="GeoService.Saveology.com.CityStateServiceProviderBehavior"     name="GeoService.Saveology.com.CityStateServiceProvider">     <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_SEOService"         contract="SEO.Common.ServiceContract.ICityStateService" />     <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""         contract="IMetadataExchange" />     </service>     <service behaviorConfiguration="GeoService.Saveology.com.ServiceMagicServiceProviderBehavior"     name="GeoService.Saveology.com.ServiceMagicServiceProvider">     <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpServiceMagicBinding"          contract="SEO.Common.ServiceContract.IServiceMagicService">     </endpoint>     <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange" />     </service> </services> 
like image 876
user82613 Avatar asked Jun 25 '09 13:06

user82613


1 Answers

I didn't have control over the security configuration for the service I was calling into, but got the same error. I was able to fix my client as follows.

  1. In the config, set up the security mode:

    <security mode="TransportCredentialOnly">   <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />   <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> 
  2. In the code, set the proxy class to allow impersonation (I added a reference to a service called customer):

    Customer_PortClient proxy = new Customer_PortClient(); proxy.ClientCredentials.Windows.AllowedImpersonationLevel =              System.Security.Principal.TokenImpersonationLevel.Impersonation; 
like image 153
Alex Peck Avatar answered Sep 30 '22 15:09

Alex Peck