Axel Magagnini
Axel Magagnini

Reputation: 884

Cannot set wsHttpBinding on Azure Web Role. Web.config ignored?

I'm trying to deploy a WCF service as a Windows Azure Role using wsHttpBinding.

When the client tries to connect to it, it keeps getting the following exception:

[SynchronizingContextState.Process] [System.Net.WebException: The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..]
   at System.Net.HttpWebRequest.GetResponse()
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

This would seem to indicate that the service is using basicHttpBinding instead. However, I checked my Web.config many times and can't seem to find anything wrong. Plus, the same service works perfectly when being hosted outside Azure.

I connected to the Azure VM and confirmed that the correct Web.config is deployed, but it looks as if it's just being ignored, because I cannot get the service metadata either, even though it's supposedly enabled.

Here's my Web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="Off" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BackendServiceBehavior">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="BackendServiceBinding" maxReceivedMessageSize="655360">
          <security mode="None" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
      <service name="MyNamespace.BackendService" behaviorConfiguration="BackendServiceBehavior">
        <endpoint name="Backend" address="" binding="wsHttpBinding" bindingConfiguration="BackendServiceBinding" contract="MyNamespace.IBackendService" />
        <endpoint name="BackendMex" address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/BackendService.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
</configuration>

Am I missing something here? Thank you very much.

Upvotes: 0

Views: 607

Answers (2)

Axel Magagnini
Axel Magagnini

Reputation: 884

Ok, I finally fixed it, it was a bad case of PEBKAC. =/

I've seen somebody have the same problem because he didn't include the namespace in the service name so I suspected it was a namespace issue, but I've looking at the wrong place all the time.

Turns out the Azure implementation for the service was defined in the wrong namespace. I corrected it and voilá, now it works.

Hope this is useful to somebody else, at least.

Upvotes: 0

johnnyhalife
johnnyhalife

Reputation: 41

Did you try adding to the endpoint behavior?

<behavior name="web">
    <webHttp />
</behavior>

(if you want MEX to be working do it for it to too)

Upvotes: 1

Related Questions