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>