Error: Cannot process the message because the content type 'application/json; charset=utf-8 was not the expected type
Solution 1
I think you are facing some exception because you are doing some mistakes in binding and others.
For REST communication in WCF, you should use the webHttpBinding
and not wsHttpBinding
. Second you should mark the Photo
property with DataMember
.
[DataContract]
public class PhotoServiceResponse
{
[DataMember]
public Byte[] Photo { get; set; }
}
And you have to use the System.ServiceModel.Activation.WebServiceHostFactory
in the svc file.
Ex.
<%@ ServiceHost Service="Service1"
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
Once you fixed this issues at-least you see some response in the client side and if the service is running in different domain make sure you have done enough settings in the service side for cross site communication.
Solution 2
Unless I'm really misreading your code, it looks like you try to return over Ajax a file as a byte array. This presents a couple of problems. First of all, as described in the jQuery API reference for Ajax return types, it appears you can't return files through Ajax using jQuery's built-in Ajax object. Second (and a bit more subjective), why aren't you just returning a URL to the file, especially if it happens to be a image? Unless you have a compelling reason, I'd just return the file URL in your Ajax result.
Solution 3
Try to add this on top of your class:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
I had the same problem and it fixed it.
Asdfg
Always trying to do the hard thing. Not necessarily the hard way.
Updated on June 04, 2022Comments
-
Asdfg almost 2 years
I am trying to invoke WCF service using jQuery and getting this error:
"Cannot process the message because the content type 'application/json; charset=utf-8' was not the expected type 'multipart/related; type="application/xop+xml"'."
This is how my WCF service looks like:
Interface:
public interface IService { [OperationContract] [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)] PhotoServiceResponse GetPhoto(); } [DataContract] public class PhotoServiceResponse { [MessageBodyMember] public Byte[] Photo { get; set; } }
Implementation:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service : IService { #region IService Members public PhotoServiceResponse GetPhoto() { PhotoServiceResponse response = new PhotoServiceResponse(); response.Photo = File.ReadAllBytes(@"C:\Temp\SomePic.bmp"); return response; } #endregion }
Config:
<system.serviceModel> <bindings> <wsHttpBinding> <binding name="WsHttpMtomBinding" maxReceivedMessageSize="5242880" messageEncoding="Mtom"> <readerQuotas maxStringContentLength="655360" maxArrayLength="1310720" maxNameTableCharCount="1310720" maxBytesPerRead="327680" /> </binding> </wsHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="svcBehaviour"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> <services> <service behaviorConfiguration="svcBehaviour" name="Service"> <endpoint address="" binding="wsHttpBinding" contract="IService" bindingConfiguration="WsHttpMtomBinding"/> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="http://localhost:8081/Service" /> </baseAddresses> </host> </service> </services> </system.serviceModel>
This is how i am trying to access this service using jQuery AJAX:
<script type="text/javascript"> $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "http://localhost:8081/Service/GetPhoto", data: "{}", crossDomain: true, dataType: "json", success: function (msg) { alert(msg); }, error: function(jqXHR) { alert(jqXHR.statusText); } }); </script>
What is the reason i am getting this error? How do i fix it?
Any help will he highly appreciated.
-
Asdfg almost 12 yearsI am not returning the file. I am returning the bytes that i guess should not have problem transferring. And i cannot send the URL of the file as file resides on the local system and so as my WCF service.
-
devstruck almost 12 yearsIf you can't make the resource available, you might try this technique. stackoverflow.com/questions/8734620/…