Configurazione del client per utilizzare il servizio Web JSON WCF

Ho configurato il servizio web per utilizzare Json come descritto in questo blog: http://www.west-wind.com/weblog/posts/164419.aspx e vari altri blog, ma non sono riuscito a creare un client per consumarlo servizio. Ho provato varie cose, ma invariabilmente ho avuto eccezioni senza senso. Qual è il modo corretto di implementare il client (WCF che dovrei aggiungere)?

Sembra esserci una carenza di esempi su come scrivere un client WCF per un servizio JSON REST. Tutti sembrano utilizzare WCF per implementare il servizio, ma quasi mai per scrivere un client. Quindi ecco un esempio piuttosto completo del servizio (implementando una richiesta GET e POST) e il client.

Servizio

Interfaccia di servizio

[ServiceContract] public interface IService1 { [OperationContract] [WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/getcar/{id}")] Car GetCar(string id); [OperationContract] [WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/updatecar/{id}")] Car UpdateCar(string id, Car car); } 

Strutture dati di servizio

 [DataContract] public class Car { [DataMember] public int ID { get; set; } [DataMember] public string Make { get; set; } } 

Implementazione del servizio

 public class Service1 : IService1 { public Car GetCar(string id) { return new Car { ID = int.Parse(id), Make = "Porsche" }; } public Car UpdateCar(string f, Car car) { return car; } } 

Servizio di revisione

 <%@ ServiceHost Language="C#" Service="JSONService.Service1" CodeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

web.config

                    

Cliente

E ora il cliente. IService1 l’interfaccia IService1 e la class Car . Inoltre, è richiesto il seguente codice e configurazione.

App.config

                

Program.cs

 public class Service1Client : ClientBase, IService1 { public Car GetCar(string id) { return base.Channel.GetCar(id); } public Car UpdateCar(string id, Car car) { return base.Channel.UpdateCar(id, car); } } class Program { static void Main(string[] args) { Service1Client client = new Service1Client(); Car car = client.GetCar("1"); car.Make = "Ferrari"; car = client.UpdateCar("1", car); } } 

Divertiti.

Quali sono le eccezioni? Potrebbero essere privi di significato per te, ma qualcuno potrebbe trovarli utili nella diagnosi del tuo problema. Io uso jQuery per fare una richiesta di jax a un servizio WCF e il settup di solito assomiglia a questo:

  $(document).ready(function() { $.ajaxSetup({ type: "POST", processData: true, contentType: "application/json", timeout: 5000, dataType: "json" }); var data = { "value": 5 }; AjaxPost("GetData", data, OnEndGetData, OnError); }); function OnEndGetData(result) { alert(result.GetDataResult); } function OnError(msg) { alert(msg); } function AjaxPost(method, data, callback, error) { var stringData = JSON.stringify(data); var url = "Service1.svc/" + method; $.ajax({ url: url, data: stringData, success: function(msg) { callback(msg); }, error: error }); } 

Il JSON.stringify () può essere trovato nello script json.org: http://www.json.org/js.html , e il mio sig per il metodo GetData assomiglia a questo:

 [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] string GetData(int value);