zoukankan      html  css  js  c++  java
  • WCFhow to write a WCF client for a JSON REST service

    There seems to be a shortage of examples about how to write a WCF client for a JSON REST service.
    Everybody seems to use WCF for implementing the service but hardly ever for writing a client.
    So here's a rather complete example of the service (implementing a GET and a POST request) and the client.

    Service

    Service interface

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

    Service data structures

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

    Service implementation

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

    Service markup

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

    Web.config

    <?xml version="1.0"?>
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>   
    </configuration>
    

    Client

    And now the client.
    It reuses the interface IService1 and the class Car.
    In addition, the following code and configuration is required.

    App.config

    <?xml version="1.0"?>
    <configuration>
      <system.serviceModel>
        <behaviors>
          <endpointBehaviors>
            <behavior name="webby">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <client>
          <endpoint address="http://localhost:57211/Service1.svc" name="Service1" binding="webHttpBinding" contract="JSONService.IService1" behaviorConfiguration="webby"/>
        </client>
      </system.serviceModel>
    </configuration>
    

    Program.cs

    public class Service1Client : ClientBase<IService1>, 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);
        }
    }
    

    Have fun.

    shareimprove this answer

  • 相关阅读:
    如何关闭微软反恶意软件客户端
    年轻爸爸家长会上猝死,事前已连续发烧三天
    人猝死前身体发出两个救命信号,一定要清楚,关键时刻救命
    火遍世界的视力恢复法 现在知道还不晚!
    重视工龄工资,食堂一定自己办
    VR行业纷纷倒闭:有硬件没内容
    企业为什么要去美国建厂
    bzoj 1046 : [HAOI2007]上升序列 dp
    bzoj 1857: [Scoi2010]传送带 三分
    bzoj 1045: [HAOI2008] 糖果传递
  • 原文地址:https://www.cnblogs.com/grj001/p/12223750.html
Copyright © 2011-2022 走看看