Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Authentication failed while calling WCF service from ASP.NET

Platform: VS 2008, .NET 3.5, C#, Oracle 11g

I've created a WCF service which takes some data elements and then inserts them into a database table and returns an integer. I've also created a small ASP.NET web app to test that service. The test web app only has a page with the fields and a button, clicking that button actually calls the web service to insert the data and return a integer value.

The steps I took:

  • Build the WCF service
  • Publish the WCF Service
  • Generate the proxy class (.cs) and app.config using svcutil
  • Build the test asp.net app and add the proxy class and config settings as generated on the above step.
  • Ruin the test app

It works fine when I deploy both the WCF and the test web app on my computer - Windows XP, IIS 5.1. But, whenever I'm trying to deploy them on a remote server it doesn't work. When I'm trying to consume the service (deployed on remote server - Windows 2003 server, IIS 6) I'm getting the following error:

The request for security token could not be satisfied because authentication failed.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ServiceModel.FaultException: The request for security token could not be satisfied because authentication failed.

Following are the .config files content:

wcf section of the Web.Config of calling ASP.NET web app (Consumer):

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
    <binding name="WSHttpBinding_IMyWCFService" 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="Message">
        <transport clientCredentialType="Windows" proxyCredentialType="None"
        realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true"
        algorithmSuite="Default" establishSecurityContext="true" />
      </security>
    </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://57.23.85.28:8001/MyWCFService/MyWCFService.svc"
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyWCFService"
      contract="IMyWCFService" name="WSHttpBinding_IMyWCFService">
    <identity>
      <dns value="localhost" />
    </identity>
      </endpoint>
    </client>
  </system.serviceModel>

Web.Config of the WCF:

<configuration>
  <connectionStrings>
    <add name="DSMyWCF" connectionString="Data Source=XXX;User id=XXX;Password=XXX;"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="MyWCFService.MyWCFServiceBehavior"
        name="MyWCFService.MyWCFService">
        <endpoint address="" binding="wsHttpBinding" contract="MyWCFService.IMyWCFService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8731/Design_Time_Addresses/MyWCFService/MyWCFService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyWCFService.MyWCFServiceBehavior">
          <!-- To avoid disclosing metadata information,
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- To receive exception details in faults for debugging purposes,
          set the value below to true.  Set to false before deployment
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>    
like image 381
Raj Avatar asked Sep 21 '11 18:09

Raj


1 Answers

Could be related with security configuration of wcf service, to be specific, Windows credential type requires valid domain username and password information.

Try providing the following attributes on clientside;

proxy.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
proxy.ClientCredentials.Windows.ClientCredential.Password = "Password ";
proxy.ClientCredentials.Windows.ClientCredential.Domain = "Domain ";
like image 200
denolk Avatar answered Oct 21 '22 03:10

denolk