2013-01-18 13 views
15

Ho ottenuto la risposta di cui sopra quando si chiama un servizio WCF tramite ajax json. Il mio codice chiamante è:Impossibile elaborare il messaggio perché il tipo di contenuto 'application/json; charset = utf-8 'non era il tipo previsto' text/xml; charset = utf-8 '

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax 
     ({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "http://localhost:90/WebServices/UserService.svc/Calculate", 
      data: "{}", 
      timeout: 10000, 
      dataType: "json", 
      success: function (response) { 
       alert(response) 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert(xhr.statusText); 
       alert(thrownError); 
      } 
     }); 
    }); 
</script> 

Il mio servizio è:

[ServiceContract] 
public interface IUserService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json 
    )] 
    Answer Calculate(); 
} 

[DataContract] 
public class Answer 
{ 
    [DataMember] 
    public string answer { get; set; } 
} 

Il mio metodo è:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
public class UserService : IUserService 
{ 
    public Answer Calculate() 
    { 
     Answer answer = new Answer(); 
     answer.answer="Hello World"; 
     return answer; 
    } 
} 

Sono stato in lotta con per qualche tempo, vedo altre persone hanno avuto lo stesso tipo problema e ho provato tutti i suggerimenti lì, ma ancora non funziona nulla.

Dov'è il problema? Come posso risolverlo?

+0

Ciao, quali suggerimenti hai provato? –

risposta

16

Sto indovinando da quando non hai mostrato come hai definito il tuo endpoint, ma sono abbastanza sicuro che sia così. L'endpoint non è definito per il consumo Web: è probabile che si utilizzi basicHttpBinding. Per consumare l'endpoint tramite jQuery (o altri client Web/REST in generale) è necessario definire un endpoint con WebHttpBinding e applicare WebHttpBehavior a tale endpoint.

Esistono diversi modi per definire correttamente l'endpoint. Il più semplice è quello di utilizzare il WebServiceHostFactory nel file .svc:

UserService.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="YourNamespace.UserService" 
       Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 
1

Per chi atterra qui con la ricerca: 'tipo di contenuto' application/json; charset = utf-8 'non era il tipo previsto' text/xml; charset = utf-8 '

Un errore simile è stato causato nel mio caso costruendo ed eseguendo un servizio senza attributi appropriati. Ho ricevuto questo messaggio di errore quando ho tentato di aggiornare il riferimento del servizio nella mia applicazione client. È stato risolto quando ho applicato correttamente gli attributi "[DataContract]" e "[DataMember]" alle mie classi personalizzate.

Modifica: Questo è molto probabilmente applicabile se il servizio è stato impostato e funzionante e quindi si è rotto dopo averlo modificato.

+1

Aggiungi codice di esempio da elaborare. –

Problemi correlati