ARLibertarian
ARLibertarian

Reputation: 167

WCF method call returning web service disco page

I have a WCF web service and application that works fine in developemnt. I've published the WCF on an IIS Server and am able to use it from the web app inside the firewall addressing it by server name. HOWEVER, now that I've put it out for use externally, it is causing problems.

My web app is getting an error trying to connect. I can see the service, disco, wsdl, etc from inside and outside the firewall, but when I make my first call for authentication from the outside, the service is returning the DISCO page instead of processing the authentication method call. This results in a ProtocolException because as I understand it, the app is expecting xml, not html.

Again, exact same web app works fine interally hitting the IIS server. One difference being externally I'm getting to it from a web address, internally i'm using the server name. But the service loads in a web browser outside the firewall using the web address.

Partial web app config:

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding 
        name="WSHttpBinding_IWebService" 
        closeTimeout="00:03:00"
        openTimeout="00:03:00" 
        receiveTimeout="00:10:00" 
        sendTimeout="00:03:00"
        bypassProxyOnLocal="false" 
        transactionFlow="false" 
        hostNameComparisonMode="StrongWildcard"
        maxBufferPoolSize="5000000" 
        maxReceivedMessageSize="5000000" 
        useDefaultWebProxy="true" 
        allowCookies="false">
        <readerQuotas maxDepth="32" maxStringContentLength="5000000" 
          maxArrayLength="5000000"
          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://<dns address/server address>/WebService.svc"
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IWebService"
      contract="WebServiceRef.IWebService" name="WSHttpBinding_IWebService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint
      address="mex"
      binding="mexHttpBinding"
      contract="IMetadataExchange" />
  </client>
</system.serviceModel>

Partial service web.config file:

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding 
        name="ServiceBinding" 
        openTimeout="00:03:00" 
        sendTimeout="00:03:00"
        transactionFlow="false" 
        maxBufferPoolSize="5000000" 
        maxReceivedMessageSize="5000000">
      </binding>
    </wsHttpBinding>
  </bindings>  
  <services>
    <service 
      behaviorConfiguration="xxx.WebServiceBehavior"
      name="xxx.WebService">
      <endpoint 
        address="http://<dns address/server address>/WebService.svc"
        binding="wsHttpBinding" 
        bindingConfiguration="ServiceBinding"
        contract="xxx.IWebService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint 
        address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="metadataSupport">
        <serviceMetadata httpGetEnabled="true" httpGetUrl="http://<dns address/server address>/WebService.svc"/>
      </behavior>
      <behavior name="xxx.WebServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
        <serviceAuthorization serviceAuthorizationManagerType="xxx.CustomAuthorizationManager, DDSClientTracking.WebService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
          <authorizationPolicies>
            <add policyType="xxx.CustomAuthorizationPolicy, DDSClientTracking.WebService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
          </authorizationPolicies>
        </serviceAuthorization>
      </behavior>
    </serviceBehaviors>
  </behaviors>

Upvotes: 3

Views: 654

Answers (0)

Related Questions