2012-11-29 13 views
6

cercando di inviare il dizionario JSON a C# WCF, quando lo invoco HTTP Response 415. Qualcuno può dirmi cosa c'è di sbagliato nel mio codice.HTTP/1.1 415 Impossibile elaborare il messaggio perché il tipo di contenuto 'application/json; charset = utf-8 'non era il tipo previsto' text/xml; charset = utf-8 '

oggetto Class

[DataContract] 
public class Class1 
{ 
    [DataMember] 
    public string AccNo; 
    [DataMember] 
    public string CompanyName; 
    [DataMember] 
    public string DocDate; 
} 

IService1.cs

[OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "json/PostSalesOrderData", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] 
     string PostSalesOrderData(string data); 

Service1.svc.cs

public string PostSalesOrderData(string data) 
    { 

     JavaScriptSerializer serializer = new JavaScriptSerializer(); 

     Dictionary<string, Class1> dict = serializer.Deserialize<Dictionary<string, Class1>>(data); 

     return dict["Debtor"].AccNo.ToString(); 
    } 

Fiddle dettagli

HTTP/1.1 415 non può elaborare il messaggio perchéil tipo di contenuto "application/json; charset = utf-8 'non era il tipo previsto' text/xml; charset = utf-8' . Server: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Data: Thu, 29 Nov 2012 01:21:55 GMT Content-Length: 0

risposta

12

L'endpoint per il vostro servizio non è propriamente configurato per ricevere l'input JSON. Affinché l'attributo [WebInvoke] di essere onorato, il vostro punto finale ha bisogno di avere la webHttpBinding, e dovrebbe anche avere un comportamento endpoint di tipo <webHttp/>

Un modo semplice per garantire che sia configurato correttamente è quello di utilizzare l'attributo Factory sulla file .svc. Qualcosa come nell'esempio qui sotto:

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

come aggiungere factory in classLibrary project? infatti sto cercando di chiamare un webservice con nella libreria di classi? –

Problemi correlati