一翰守、概述
Windows Communication Foundation(WCF)是由微軟發(fā)展的一組數(shù)據(jù)通信的應(yīng)用程序開(kāi)發(fā)接口谜悟,可以翻譯為Windows通訊接口饵沧,它是.NET框架的一部分。由 .NET Framework 3.0 開(kāi)始引入赌躺。
WCF的最終目標(biāo)是通過(guò)進(jìn)程或不同的系統(tǒng)、通過(guò)本地網(wǎng)絡(luò)或是通過(guò)Internet收發(fā)客戶和服務(wù)之間的消息羡儿。
WCF合并了Web服務(wù)礼患、.net Remoting、消息隊(duì)列和Enterprise Services的功能并集成在Visual Studio中。
WCF專門(mén)用于面向服務(wù)開(kāi)發(fā)缅叠。
客戶機(jī)使用瀏覽器訪問(wèn)服務(wù)器A悄泥,服務(wù)器A為了業(yè)務(wù)需要與其他各種應(yīng)用部署在服務(wù)器B、C肤粱、D....再通過(guò)WCF技術(shù)互相通信弹囚,相互訪問(wèn)...然而面向服務(wù)的好處不僅僅在此,他還提供了不同語(yǔ)言不同操作系統(tǒng)的可交互性领曼。
二鸥鹉、新建WCF
說(shuō)明:本文環(huán)境是建立在VS2017的基礎(chǔ)上,不同版本VS操作上可能會(huì)有點(diǎn)不同
-
新建項(xiàng)目庶骄,直接選擇創(chuàng)建WCF服務(wù)應(yīng)用程序毁渗,
創(chuàng)建之后,生成這樣的目錄:
2.刪除系統(tǒng)生成的兩個(gè)文件IService1.cs與Service1.svc单刁。
3.添加自定義的WCF【服務(wù)文件】User.svc灸异,此時(shí)vs2010會(huì)自動(dòng)生成WCF接口文件IUser.cs,我們?cè)贗User中定義WCF方法PlusNumber羔飞,在User.svc.cs對(duì)該接口的方法進(jìn)行實(shí)現(xiàn)肺樟。
代碼如下:
//IUser.cs
namespace WcfService1
{
// 注意: 使用“重構(gòu)”菜單上的“重命名”命令,可以同時(shí)更改代碼和配置文件中的接口名“IUser”逻淌。
[ServiceContract]
public interface IUser
{
//[OperationContract]
//void DoWork();
[OperationContract]
string PlusNumber(int a, int b);
}
}
//User.svc.cs
namespace WcfService1
{
// 注意: 使用“重構(gòu)”菜單上的“重命名”命令么伯,可以同時(shí)更改代碼、svc 和配置文件中的類名“User”恍风。
// 注意: 為了啟動(dòng) WCF 測(cè)試客戶端以測(cè)試此服務(wù)蹦狂,請(qǐng)?jiān)诮鉀Q方案資源管理器中選擇 User.svc 或 User.svc.cs,然后開(kāi)始調(diào)試朋贬。
public class User : IUser
{
//public void DoWork()
//{
//}
public string PlusNumber(int a, int b)
{
int c = a + b;
string result = "WCF服務(wù)計(jì)算結(jié)果:"+c.ToString();
return result;
}
}
}
大家可以看到凯楔,在WCF中的接口與普通接口的區(qū)別只在于兩個(gè)上下文,其他的和我們正常學(xué)習(xí)的接口一樣锦募。定義這個(gè)上下文要添加System.ServiceModel的引用摆屯。
[ServiceContract]
,來(lái)說(shuō)明接口是一個(gè)WCF的接口糠亩,如果不加的話虐骑,將不能被外部調(diào)用。
[OperationContract]
赎线,來(lái)說(shuō)明該方法是一個(gè)WCF接口的方法廷没,不加的話同上。
此時(shí)我們的第一個(gè)WCF服務(wù)程序就建立好了垂寥,將User.svc“設(shè)為起始頁(yè)”颠黎,然后F5運(yùn)行一下試試另锋,如下圖所示,VS自動(dòng)調(diào)用了WCF的客戶端測(cè)試工具以便我們測(cè)試程序,然后雙擊PlusNumber()
方法名狭归,就會(huì)出現(xiàn)下圖:
在請(qǐng)求窗口中的值中輸入?yún)?shù)“a”與“b”夭坪,然后點(diǎn)擊“調(diào)用”,在響應(yīng)窗口中會(huì)出現(xiàn)返回值“WCF服務(wù)計(jì)算結(jié)果:a+b的值
”过椎,說(shuō)明測(cè)試成功室梅,點(diǎn)擊下面的XML也可以看到XML的數(shù)據(jù)傳輸。我們現(xiàn)在建立好了服務(wù)的應(yīng)用程序和業(yè)務(wù)邏輯疚宇。
三亡鼠、將WCF部署到IIS
到IIS右擊網(wǎng)站,然后添加網(wǎng)站灰嫉,將下圖的參數(shù)填上拆宛。
然后再右擊WcfService1文件將它設(shè)為應(yīng)用程序:
然后就可以瀏覽此服務(wù):
點(diǎn)擊User.svc,跳轉(zhuǎn)到以下調(diào)用頁(yè)面:
點(diǎn)擊
http://localhost:8001/WcfService1/User.svc?wsdl
,從這里可以看到我寫(xiě)的方法,這個(gè)地址也是我們后用將要引用的地址:現(xiàn)在我們的WCF服務(wù)就算是已經(jīng)部署完成了。
四讼撒、調(diào)用WCF
這邊我是打算創(chuàng)建一個(gè)web服務(wù)程序來(lái)調(diào)用浑厚,所以我新建一個(gè)空白MVC web項(xiàng)目,
創(chuàng)建后目錄:
然后添加服務(wù)引用,將添加好參數(shù)根盒,可以修改引用命名空間名稱钳幅,
完成添加后,這里我是選擇創(chuàng)建一個(gè)Test控制器以及對(duì)應(yīng)視圖來(lái)達(dá)到調(diào)用那個(gè)WCF的服務(wù),要記得using剛添加的WCF引用炎滞,這樣才能使用敢艰。
控制器代碼如下:
using WebForTest.ServiceReference1;
public class TestController : Controller
{
// GET: Test
public ActionResult Index()
{
ViewBag.result = "暫無(wú)計(jì)算";
return View();
}
// POST: Test
[HttpPost]
public ActionResult Index(int a,int b)
{
UserClient user = new UserClient();
string result = user.PlusNumber(a, b);
ViewBag.result = result;
return View();
}
}
視圖代碼如下:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>@ViewBag.result</p>
@using (Html.BeginForm("Index", "Test", FormMethod.Post))
{
<p>
<input id="a" name="a" type="text" />+<input id="b" name="b" type="text" />
<br/><input id="submit_txt" type="submit" />
</p>
}
運(yùn)行效果如下:
通過(guò)以上例子我們就已經(jīng)完成了對(duì)WCF的一個(gè)簡(jiǎn)單新建,部署及調(diào)用