Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Silverlight+WCF exception: Expecting application/soap+xml, received text/xml

I have a Silverlight application in which I would like to call a WCF service. When calling the service I receive the following response from the server:

415 Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8

Has anyone experienced this problem before? Does anyone know which configuration settings I need to adjust? Any information on how to fix this would be appreciated.

like image 285
Kevin Avatar asked Jan 29 '09 23:01

Kevin


3 Answers

Well, you could try using the "Silverlight-enabled WCF Service" template in VS2008, and comparing the differences? I expect that you need to use the basicHttpBinding and are using something more exotic.

For info, here is the web.config section for a default Silverlight/WCF service:

 <system.serviceModel>
  <behaviors>
   <serviceBehaviors>
    <behavior name="MySite.Service1Behavior">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <services>
   <service behaviorConfiguration="MySite.Service1Behavior"
       name="MySite.Service1">
    <endpoint address="" binding="basicHttpBinding"
       contract="MySite.Service1" />
    <endpoint address="mex" binding="mexHttpBinding"
       contract="IMetadataExchange" />
   </service>
  </services>
 </system.serviceModel>
like image 95
Marc Gravell Avatar answered Nov 06 '22 17:11

Marc Gravell


I encountered this error trying to connect a Silverlight application to a WCF service.

The root cause turned out to be that the WCF Service was bound using wsHttpBinding whereas Silverlight only supports basicHttpBinding.

So check your <bindings> element in web.config and make sure binding information for your service is in the <basicHttpBinding> element and that the <endpoint> element of your service definition uses basicHttpBinding.

like image 42
ScottB Avatar answered Nov 06 '22 17:11

ScottB


Probably the service is throwing an exception. The exception message is not in the format expected by the service call, hence the "not the expected type" message.

If the method called is not throwing an exception internally, check your security settings for the service or the other configuration items, per Marc Gravell's helpful answer.

There are a couple of ways to examine the exception: Looking at the exception message in detail, or tracing the WCF service calls.

  1. To see the exception message put a try-catch around the service call and set a breakpoint in the catch block. This will allow you to examine the exception contents. You may want to configure the service temporarily to include exception details in the fault message.

  2. You can trace WCF messages easily by enabling message logging for the service. You can do this in the config file (see Configuring Message Logging) or using the WCF Service Configuration Editor (available under VS 2008 Tools menu or by right clicking the config file). Then use the Service Trace Viewer to browse the log file. The viewer is part of the SDK and may be found here: "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcTraceViewer.exe".

like image 2
Tom A Avatar answered Nov 06 '22 19:11

Tom A