茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1688058 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
HoneyMoon_Day3_00122.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2017/7/20 15:58:58

一、概述

  Windows Communication Foundation(WCF)是由微軟發展的一組數據通信的應用程序開發接口,可以翻譯為Windows通訊接口,它是.NET框架的一部分。由 .NET Framework 3.0 開始引入。

  WCF的最終目標是通過進程或不同的系統、通過本地網絡或是通過Internet收發客戶和服務之間的消息。

  WCF合併了Web服務、.net Remoting、消息隊列和Enterprise Services的功能並集成在Visual Studio中。

  WCF專門用於面向服務開發。

二、基於Asp.net 的應用程序開發與面向服務開發

wcf


  在基於Asp.net 的應用程序開發中,我們由客戶機的瀏覽器訪問應用程序服務器,然後通過應用程序服務器中的數據庫連接去連接數據庫服務器,讀取或是操作數據,有時候可能會多一個文件服務器。大家可以觀察到,基本上所有的應用都放在了一台服務器上,但對於一個,由於業務上的需要(如:與外部系統交互),一台服務器很難支持所有的應用。我們再看下面的圖:

wcf

  客戶機使用瀏覽器訪問服務器A,服務器A為了業務需要與其他各種應用部署在服務器B、C、D....再通過WCF技術互相通信,相互訪問...然而面向服務的好處不僅僅在此,他還提供了不同語言不同操作系統的可交互性..由於本文不是介紹SOA的文章,感興趣的同學可以參見: SOA

三、第一個WCF程序

  1. 新建立空白解決方案,並在解決方案中新建項目,項目類型為:WCF服務應用程序。建立完成後如下圖所示:


wcf

  2.刪除系統生成的兩個文件IService1.cs與Service1.svc。

  3.添加自定義的WCF【服務文件】User.svc,此時vs2010會自動生成WCF接口文件IUser.cs,我們在IUser中定義WCF方法ShowName,在User.svc.cs對該接口的方法進行實現。

代碼如下:


 1 using System.ServiceModel;
2
3 namespace WCFService
4 {
5 [ServiceContract]
6 public interface IUser
7 {
8 [OperationContract]
9 string ShowName(string name);
10 }
11 }
12
13
14 namespace WCFService
15 {
16 public class User : IUser
17 {
18 public string ShowName(string name)
19 {
20 string wcfName = string.Format("WCF服務,顯示姓名:{0}", name);
21 return wcfName;
22 }
23 }
24 }

  大家可以看到,在WCF中的接口與普通接口的區別只在於兩個上下文,其他的和我們正常學習的接口一樣。定義這個上下文要添加System.ServiceModel的引用。

[ServiceContract],來說明接口是一個WCF的接口,如果不加的話,將不能被外部調用。

[OperationContract],來說明該方法是一個WCF接口的方法,不加的話同上。 

此時我們的第一個WCF服務程序就建立好了,將User.svc“設為起始頁”,然後F5運行一下試試,如下圖所示,VS2010自動調用了WCF的客戶端測試工具以便我們測試程序:

  我們雙擊上圖中的 ShowName() 方法,出現如下圖:


  在請求窗口中的值中輸入參數“你的姓名”,然後點擊“調用”,在響應窗口中會出現返回值“WCF服務,顯示姓名:你的姓名”,說明測試成功,點擊下面的XML也可以看到XML的數據傳輸。我們現在建立好了服務的應用程序和業務邏輯,即非常簡單的打印姓名的方法,測試也成功了。那麼我們怎麼用呢?

四、場景

  我們設計的場景是在生產中經常應用的場景,把WCF程序寄宿在IIS之上。假設場景如下:A服務器和B服務器。我們把我們剛剛建立的WCF程序“部署”在B服務器上(本教程的A,B服務器都放是我自己的一台機器),我們的目標是在A服務器的應用程序來訪問B服務器的WCF程序,實現服務器端的應用程序通訊。

五、將WCF程序寄宿在B服務器的IIS之上

  首先我們將WCF應用程序發佈一下,然後部署在B服務器的IIS之上,如下圖所示:

 

  鼠標右鍵瀏覽Uesr.svc,在遊覽器中出現如下圖所示,說明服務部署成功。


   上圖中的 http://localhost/User.svc?wsdl即為我們要引用的服務地址。

六、在客戶端[A服務器]創建服務的引用

  我們這裡以Web應用程序為例,建立地物理地址為本機,但是大家可以想像成B服務器是遠程計算機,localhost為一個其他的IP地址。

  新建解決方案,並且創建ASP.NET Web應用程序的項目。命名為:WCFClient,如下圖所示:

 

  (1)新建Asp.net頁面,命名為:WcfTest.aspx。


  (2)添加在第五步中部署的服務的引用。如下圖所示:

wcf

  此時彈出添加服務引用的窗體,如下圖所示:

  我們在地址裡寫上我們寄宿在IIS上的WCF服務的地址服務路徑,此處為: http://localhost/User.svc?wsdl,在名稱空間處填寫WCFService[此名稱空間要在下面的客戶端中引用]然後點擊“前往”-->“確定”按鈕。此時我們完成了對服務的引用。我們再次查看解決方案,裡面多了Service References的文件夾,通過資源管理器打開後裡面多了些文件,這些文件用於客戶端向服務端的調用,現在先不用管他。


 、使用WCF服務端的方法

  WcfTest.aspx的代碼如下:


 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WCFTest.aspx.cs" Inherits="WCFClient.WCFTest" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6 <title></title>
7 </head>
8 <body>
9 <form id="form1" runat="server">
10 <asp:TextBox ID="txtName" runat="server"></asp:TextBox><br />
11 <asp:Button ID="btnSubmit" runat="server" Text="測試WCF服務" OnClick="btnClick" />
12 </form>
13 </body>
14 </html>
15
16 using System;
17 using System.Collections.Generic;
18 using System.Linq;
19 using System.Web;
20 using System.Web.UI;
21 using System.Web.UI.WebControls;
22
23 //引用WCF服務的名稱空間
24 using WCFClient.WCFService;
25
26 namespace WCFClient
27 {
28 public partial class WCFTest : System.Web.UI.Page
29 {
30 protected void Page_Load(object sender, EventArgs e)
31 {
32
33 }
34
35 protected void btnClick(object sender, EventArgs e)
36 {
37 UserClient user = new UserClient();
38 string result = user.ShowName(this.txtName.Text);
39 Response.Write(result);
40 }
41 }
42 }

  上面中的UserClient類是在添加引用的時候生成的服務端User類的客戶端代理類,一般客戶端代理類名稱都會是**Client。我們運行一下看下效果。

  通過以上的例子,我們完成了由A服務器的應用向B服務器中WCF提供的方法的調用。這個例子比較簡單,對於經常開發B/S結構應用程序的同學們來說比較好理解。

八、說明:因為網上的入門教程比較少,本教程只做入門,後面會繼續講些其他入門的東西,深入的請看園子裡: Artech 大哥的文章。

九、代碼下載:

   10 WCF 教程

十、版權


  轉載請註明出處: http://www.cnblogs.com/iamlilinfeng


原文出處:无废话WCF入门教程一[什么是WCF] - 李林峰的园子 - 博客园
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|