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>
