最近在學習這個WCF,由於剛開始學 不久,發現網上的一些WCF教程都比較簡單,感覺功能跟WebService沒什么特別大的區別,但是看網上的介紹,就說WCF比WebService牛逼多少多少,反正我剛開始入門,就沒覺得多大區別啦,這次寫的東西跟WebService一樣,我們寫了一個WCF,那當然就是要用的,要用的話,當然不能只能在.NET平台下用了,必須跨平台呀,所以,Ajax能調用,這個基本的要求就必須要實現的了,所以,本次經驗分享就是寫JQuery的Ajax調用WCF的服務了。
一、新建一個WCF,如下:

二、然后把項目自動生成的兩個例子刪了,如下圖:

三、然后新建一個:AjaxService.svc,如下圖:

新建之后,會提示這個,選擇“全是“即可,然后他就會自動更改Web.config里面的一些參數,用戶Ajax跨域的,基本上就是這些了,如下圖:

四:現在我們需要配置Web.config的一些參數,首先就是配置Forms身份驗證,這個必須要配置,否者調用不成功,如下圖:
<authentication mode="Forms" />

接着再配置一下綁定,這里,我們使用圖形的方法來綁定,否則完全代碼配置,會頭暈的,首先在Web.config處右鍵,如下圖:

在“綁定”處,新建綁定,如下圖:

選擇:webHttpBinding,如下圖:

然后,確定,然后我們修改一下這個綁定的名稱,不然后續如果我們越來越多WCF文件的時候,就會傻傻分不清楚了,這里我們改名為:AjaxServiceBinding,此外還需要把“crossDomainScriptAccessEnabled”設置為“true”,如下圖:

接着,我們去到"服務",然后編輯一下“終結點”的配置,這里面需要修改兩個地方,第一個:就是給這個終結點一個Name,我們這里就以WCF文件的名稱“AjaxService”來命名,第二個就是要在“BindingConfiguration”處綁定我們剛剛配置的那個“綁定”,這樣服務才能正常使用,如下圖:


五、到此為止,Web.config的配置就告一段落,如果需要配置多個WCF文件,那就重復以上操作,下面,我們轉到AjaxService.svc中去編寫我們要運用到的方法。
首先,我們編寫一個不需要傳遞參數的方法,全文如下圖:

這里提供文字類,以免學習過程中由於代碼敲錯的報錯影響學習效果:
//下面這個需要我們手動添加
[JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")]
//首先我們創建一個不傳遞參數的WCF方法,如下:
[OperationContract]
[
WebGet
(ResponseFormat =
WebMessageFormat
.Json)]
到這里,一個不需要傳遞參數的方法,結束,接下來,就是Ajax的調用,調用也很簡單,我們先把這個WCF跑起來,看看他的服務地址是多少:
首先,右鍵→“瀏覽器 ”訪問:

然后我們就看到這個,看到這個,代表我們這個WCF服務已經成功創建了(日后正式使用,發布在IIS就可以了,跟發布普通網站一樣。),如下圖:

好,從瀏覽器,我們看到他的服務地址是:
http://localhost:5603/AjaxService.svc,
那么,我們就去新建一個HTML來試試看能否正常調用:
六、新建一個HTML,怎么簡單怎么來,我們就弄一個button和一個js的方法,代碼如下(JQuery自己引用,這里我用的是本地的):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<script src="js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function fGetWCF() {
$.getJSON(
"http://localhost:5603/AjaxService.svc/MyFirstWCFFunction?jsoncallback=?"
,
function(data) {
alert(data);
var vData = JSON.stringify(data);
alert(vData);
});
}
</script>
</head>
<body>
<input type="button" name="wcf" id="wcf" value="無參數調用WCF測試" onclick="fGetWCF()" />
</body>
然后我們把頁面跑起來,點擊“”,就會看到彈出下面這個:

代表我們調用成功了,這個時候,我們可以暗爽一下了。
七:但是,萬惡的但是出現了。嗯,沒錯,我們項目中經常用到的是,肯定要傳參的了,不傳參怎么用啊,你說是不是,所以,下面我就講到傳參的了。
萬幸的是,這次我們的Web.config不需要動他了,我們只需要在新方法里面,做一些小改動即可,如下(自己比較一下,需要傳參與不需要傳參的區別哈):
//接下來,我們就新建一個需要傳參的方法,如下:
[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public string MySecondWCFFunction(string name)
{
string strMsg = string.Format("我的第二個WCF方法,我【{0}】調用成功啦,好開心,O(∩_∩)O哈哈~", name);
// 在此處添加操作實現
return strMsg;
}
然后HTML的代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<script src="js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function fGetWCF() {
$.getJSON("http://localhost:5603/AjaxService.svc/MyFirstWCFFunction?jsoncallback=?",
function(data) {
alert(data);
var vData = JSON.stringify(data);
alert(vData);
});
}
function fGetWCF2() {
$.getJSON("http://localhost:5603/AjaxService.svc/MySecondWCFFunction?jsoncallback=?", {
name: '南宮蕭塵'
},
function(data) {
alert(data);
var vData = JSON.stringify(data);
alert(vData);
});
}
</script>
</head>
<body>
<input type="button" name="wcf" id="wcf" value="無參數調用WCF測試" onclick="fGetWCF()" />
<input type="button" name="wcf" id="wcf" value="有參數調用WCF測試" onclick="fGetWCF2()" />
</body>

到這里,就大功告成啦,接下來的東西,就由大家自己去展開拓展了,本次經驗分享到此結束。
我新建一個QQ群,如果有問題,可以在群里提。如果合適,也會根據大家提的比較多的問題,來寫篇博文,幫助更多的人,群號:275523437
點擊鏈接加入群【.Net,MVC,EasyUI,MUI,Html,JS】:
http://jq.qq.com/?_wv=1027&k=2A0RbLd
(如果有私活,或者一起合作的,也可以私信找我呀,嘿嘿);
作者:南宮蕭塵
E-mail:314791147@qq.com
QQ:314791147
日期:2016-05-16