1.创建WCF服务
直接在网站中添加 Ajax-enabled-WCF Services ,命名为AjaxWcfServices.svc
代码如下:
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class HelloWorld
{
// 添加 [WebGet] 属性以使用 HTTP GET
[OperationContract]
[WebGet(RequestFormat=WebMessageFormat.Json)]
public void DoWork(Person p)
{
// 在此处添加操作实现
return;
}
[OperationContract]
[WebInvoke(RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Json,
BodyStyle=WebMessageBodyStyle.WrappedRequest)]
public string DoWorkPost(string id, string title, string content)
{
return string.Format("您输入的标题是:{0}/n/n您输入的内容是:{1}/n/n此文章的id是:{2}", title, content, id.ToString());
}
[OperationContract]
[WebInvoke(RequestFormat=WebMessageFormat.Json,
ResponseFormat=WebMessageFormat.Xml,
BodyStyle=WebMessageBodyStyle.WrappedRequest)]
public Person DoWorkXml(string personName)
{
Person p = new Person();
p.Name = personName;
p.Age = 25;
p.Shoes = new List<string>() {"shoes1","shoes2" };
return p;
}
// 在此处添加更多操作并使用 [OperationContract] 标记它们
}
2、客户端代码
function SendAjaxWithPost(id, title, content) {
$.ajax({
type: "post",
contentType: "text/json",
dataType:"json",
url: "WCFServices/HelloWorld.svc/DoWorkPost",
data: '{"id":' + id + ',"title":"' + title + '","content":"' + content + '"}',
success: function(msg) {
alert(msg);
if (msg.d) {
alert(msg.d);
}
},
error: function(XMLHttpRequest, textStatus, errorThrow) {
alert("Error Occured!");
}
});
}
function WcfAjaxXml(personName) {
$.ajax({
type: "post",
contentType: "text/json",
dataType: "text/xml",
url: "WCFServices/HelloWorld.svc/DoWorkXml",
data: '{"personName":"' + personName + '"}',
success: function(msg) {
alert(msg);
var result = "";
result += "Name:" + $(msg).find("Name").text() + ",";
result += "Age:" + $(msg).find("Age").text() + ",";
result += "Shoes:" + $(msg).find("Shoes").text();
alert(result);
},
error: function(XMLHttpRequest, textStatus, errorThrow) {
alert("Error Occured!");
}
});
}
在用Jquery ajax调用WCF服务传递json对象时,在分别用Post,get数据方式时,设置json参数格式时需要采用不同的格式类型。
Get类型:参数传递格式:{ "name": name }
Post类型:参数传递格式:'{"name":"'+name+'"}' 如果用Get类型那样传参会在Wcf接受的时候会提示json格式错误
在用Post类型提交时,相应的WCF服务 [WebGet()]修改成相应的 [WebInvoke()],WCF默认传递格式为json,也可显示的添加为[WebGet(ResponseFormat=WebMessageFormat.Xml)]或者[WebInvoke(RequestFormat=WebMessageFormat.Xml)]