WCF wshttpbinding on IIS error - The caller was not authenticated by the service

61 Views Asked by At

I have a simple WCF service that uses wsHttpBinding and works on Visual Studio development environment but not when deployed on IIS. My console client app that I use to test encounters the error: "The caller was not authenticated by the service" when I direct it to IIS endpoint where I deploy my service1.svc. I look on similar posting here in Stackoverflow but none works for me. I appreciate any advice from anyone.

My webconfig in IIS is as follows:

<system.serviceModel>
      <bindings>
          <wsHttpBinding>
              <binding name="wsHttpBinding">
                  <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                    maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />
              </binding>
          </wsHttpBinding>
      </bindings>
    <services>
      <service name="WCFOA416_WSHttp.OA_Services">
        <endpoint binding="wsHttpBinding" 
            bindingConfiguration="wsHttpBinding" 
            name="WSHttp_OA_Server_Endpoint" contract="WSHttp_OA_ServerSoap" />
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
            contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>         
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="wsHttpBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

My client app.config is:

<system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttp_OA_Server_Endpoint2" >
                    <readerQuotas maxDepth="2147483647" 
            maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
    maxNameTableCharCount="2147483647" />
                </binding>
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://example.com/Service1.svc"
                binding="wsHttpBinding" bindingConfiguration="WSHttp_OA_Server_Endpoint2" 
        contract="ServiceReference4.WSHttp_OA_ServerSoap" name="WSHttp_OA_Server_Endpoint2">
                <identity>
                    <servicePrincipalName value="host/AMAZONA-XXXXXX1" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>

My client console code is:

ServiceReference4.WSHttp_OA_ServerSoapClient c1 = new ServiceReference4.WSHttp_OA_ServerSoapClient();

            string[] a = c1.GetMethods();
            foreach (string ss in a)
            {
                Console.WriteLine(ss);
            }

My website setting for IIS Authentication is Anonymous.Authentication-Status is Enabled.

1

There are 1 best solutions below

0
user2717643 On

I got this working by setting the following:

Server web.config:

<wsHttpBinding>
<security mode="None">
                      <transport clientCredentialType="None" />
                      <message establishSecurityContext="false" />
                  </security>
</wsHttpBinding>

Client app config:

<wsHttpBinding>
<binding name="WSHttp_OA_Server_Endpoint3">
                    <security mode="None" />
                </binding>
</wsHttpBinding>

<endpoint address="http://ms.pwrmetrixonline.com/OA416WSHTTP/Service1.svc"
                binding="wsHttpBinding" bindingConfiguration="WSHttp_OA_Server_Endpoint3"
                contract="ServiceReference5.WSHttp_OA_ServerSoap" name="WSHttp_OA_Server_Endpoint3" />