zoukankan      html  css  js  c++  java
  • How to expose a JSON endpoint from a WCF-service

    Having seen the small footprint set by JSON – I’ve begun using it extensively for mobile device (WP7) communication. In particular the phone scenario makes it desirable to have an as small as possible data load to transfer between server and device. When using the JSON formatting, you can really minimize the load as documented here. Below is what is returned in JSON-format (compare that to the verbose OData or SOAP formatting!):

    [{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"}]

    How to do ?
    To expose a WCF-implemented service with JSON support, you need to setup these artifacts:

    Service Contract:
    First define the contract for the service to expose.

    namespace WebService1
    {
        [ServiceContract(Namespace="http://someethingelse.com")]
        public interface IEmployeeService
        {
            [OperationContract]
            [WebInvoke(BodyStyle=WebMessageBodyStyle.Bare, ResponseFormat=WebMessageFormat.Json)]
            Employee[] GetAll_POST();
    
            [OperationContract]
            [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
            Employee[] GetAll_GET();
        }
    
        [DataContract(Namespace="http://somethingunique.com")]
        public class Employee
        {
            [DataMember]
            public int BirthYear { get; set; }
            [DataMember]
            public string FirstName { get; set; }
            [DataMember]
            public string LastName { get; set; }
        }
    }
    

      

    Note the WebInvoke and WebGet attributes on the service definition. The WebInvoke attribute specifies that the method will obey POST-requests, where as the WebGetattribute will make the method obey GET-requests.

    The two attributes takes parameters that allows for specifying in which format the data should be formatted. When the ResponseFormat=WebMessageFormat.Json is set, the data returned by the method is formatted as a clean and simple JSON notation.

    Web.config
    Of-course you also need to setup configuration in the web.config. Here you should pay special attention to the binding and the behaviorConfiguration attributes.
    Important: In particular the endpointBehavior should have <webHttp> set as content to gain the clean JSON formatting (see below).

      <system.serviceModel>
        <services>
          <service name="WebService1.EmployeeService">
            <endpoint name="jsonEP"
                      address=""
                      binding="webHttpBinding"
                      behaviorConfiguration="json"
                      contract="WebService1.IEmployeeService"/>
          </service>
        </services>
        <behaviors>
          <endpointBehaviors>
            <behavior name="json">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
      </system.serviceModel>
    

      

    Client:
    When calling the above service, you will receive a nicely formatted JSON string like this:

    [{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"},{"BirthYear":1900,"FirstName":"Anders","LastName":"And"}]

    That’s how easy it is setting up when using WCF.

    http://blog.clauskonrad.net/2010/11/how-to-expose-json-endpoint-from-wcf.html

  • 相关阅读:
    如何快速、低成本构建一套稳定、高效、可靠的互联网主播直播/商业直播(推流/分发/播放)方案
    EasyNVR H5无插件RTSP直播方案在Windows server 2012上修复无法定位GetNumaNodeProcessorMaskEx的问题
    EasyNVR H5无插件RTSP直播方案在Windows server 2012上修复无法定位GetNumaNodeProcessorMaskEx的问题
    EasyPusher RTSP推流/EasyRTMP RTMP推流Android安卓摄像头视频偏暗的问题解决方案
    EasyPusher RTSP推流/EasyRTMP RTMP推流Android安卓摄像头视频偏暗的问题解决方案
    EasyPlayer RTSP Android安卓播放器修复播放画面卡在第一帧bug
    Ubuntu14.04下安装eclipse
    UBuntu14.04下安装和卸载Qt5.3.1
    ubuntu创建、删除文件及文件夹,强制清空回收站方法
    Ubuntu下安装JDK1.7
  • 原文地址:https://www.cnblogs.com/wzihan/p/14737572.html
Copyright © 2011-2022 走看看