1、先建一個WCF Service
建一個ServiceContract接口 1 [ServiceContract]
public interface IJsonWCFService { /// <summary> /// GetJsonResult /// </summary> /// <param name="name"></param> /// <param name="address"></param> /// <param name="phone"></param> /// <remarks> /// 為實現Json序列化,添加屬性 /// [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] /// </remarks> /// <returns></returns> [OperationContract] [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] JsonResult GetJsonResult(string name, string address, string phone); }
實現這個接口
public class JsonWCFService : IJsonWCFService { #region IJsonWCFService Members /// <summary> /// Implement the interface /// </summary> /// <param name="name">Name</param> /// <param name="address">Address</param> /// <param name="phone">PhoneNumber</param> /// <returns>JsonResult</returns> public JsonResult GetJsonResult(string name, string address, string phone) { JsonResult result = new JsonResult(name, address, phone); return result; } #endregion }
一個返回的DataContract類
[DataContract] public class JsonResult { /// <summary> /// Construct /// </summary> public JsonResult(string name, string address, string phone) { _name = string.Format("Name:{0}", name); _address = string.Format("Address:{0}", address); _phoneNumber = string.Format("PhoneNubmer:{0}", phone); } private string _name; /// <summary> /// Name /// </summary> [DataMember] public string Name { get { return _name; } set { _name = value; } } private string _address; /// <summary> /// Address /// </summary> [DataMember] public string Address { get { return _address; } set { _address = value; } } private string _phoneNumber; /// <summary> /// PhoneNumber /// </summary> [DataMember] public string PhoneNumber { get { return _phoneNumber; } set { _phoneNumber = value; } }
2、為實現Json序列化設置,我們還得添加一個WebContentTypeMapper
(此類最終會用在Service的配置文件中)
using System.ServiceModel.Channels; namespace Microsoft.Ajax.Samples { /// <summary> /// JsonContentTypeMapper /// 用在配置中<webMessageEncoding webContentTypeMapperType="Microsoft.Ajax.Samples.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> /// </summary> public class JsonContentTypeMapper : WebContentTypeMapper { public override WebContentFormat GetMessageFormatForContentType(string contentType) { if (contentType == "text/javascript") { return WebContentFormat.Json; } else { return WebContentFormat.Default; } } } }
3、添加svc文件,便於發布Service
svc文件其實是十分簡單的一個文件,以下是SVC文件中的內容,可以將此文件添加在網站項目的根目錄,也可以是一個子目錄。對此沒有太多的要求。
<%@ ServiceHost Language="C#" Debug="true" Service="JsonWCFService" %>
4、添加web.config文件
WCFService中相當一部分知識是關於配置的
<?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings/> <system.web> </system.web> <system.serviceModel> <behaviors> <endpointBehaviors > <behavior name="jsonWcfBehavior"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <bindings> <customBinding> <binding name="JsonMapper"> <!--此處配置相當重要,使用了我們編寫的JsonContentTypeMapper類,約定返回值類型是Json--> <webMessageEncoding webContentTypeMapperType="Microsoft.Ajax.Samples.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> </webMessageEncoding> <httpTransport manualAddressing="true"/> </binding> </customBinding> </bindings> <services> <service name="JsonWCFService" > <!--注意此處的endpoint配置,address和contract兩個屬性,在客戶端Js調用時會用的上--> <endpoint address="ajaxEndpoint" behaviorConfiguration="jsonWcfBehavior" binding="customBinding" bindingConfiguration="JsonMapper" contract="IJsonWCFService"> </endpoint> </service> </services> </system.serviceModel> </configuration>