2013-01-18 7 views
15

Otrzymuję powyższą odpowiedź podczas wywoływania usługi WCF przez ajax json. Mój kod wywołujący jest:Nie można przetworzyć wiadomości, ponieważ typ zawartości "application/json; charset = utf-8 'nie był oczekiwanym typem "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> 

moja usługa jest:

[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; } 
} 

moja metoda jest:

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

I zostały walczą ze na jakiś czas, widzę inni ludzie mieli takie same problem typu i wypróbowałem wszystkie sugestie, ale wciąż nic nie działa.

Gdzie jest problem? Jak mogę to rozwiązać?

+0

Witam, Jakie sugestie próbowałeś? –

Odpowiedz

16

Zgaduję, ponieważ nie pokazałeś, jak zdefiniowałeś swój punkt końcowy, ale jestem prawie pewien, że tak jest. Twój punkt końcowy nie jest zdefiniowany do konsumpcji sieci - prawdopodobnie używa się basicHttpBinding. Aby zużywać punkt końcowy za pośrednictwem jQuery (lub ogólnie innych klientów sieci/REST), należy zdefiniować punkt końcowy za pomocą WebHttpBinding i zastosować do niego WebHttpBehavior.

Istnieją różne sposoby prawidłowego zdefiniowania punktu końcowego. Najprostszym z nich jest użycie WebServiceHostFactory w .svc pliku:

UserService.svc:

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

Dla każdego, kto ląduje tu wyszukując: 'Typ zawartości' application/json; charset = utf-8 'nie był oczekiwanym typem "text/xml; charset = utf-8 '

Podobny błąd powstał w moim przypadku przez zbudowanie i uruchomienie usługi bez odpowiednich atrybutów. Ten komunikat o błędzie został wyświetlony podczas próby zaktualizowania odwołania do usługi w aplikacji klienckiej. Zostało to rozwiązane, gdy poprawnie zastosowałem atrybuty "[DataContract]" i "[DataMember] do moich klas niestandardowych.

Edycja: najprawdopodobniej miałoby zastosowanie, gdyby usługa była skonfigurowana i działająca, a następnie zepsuła się po jej edycji.

+1

Dodaj próbkę kodu do opracowania. –

Powiązane problemy