C# WCF入門
一、什麼是WCF
WCF是使用託管程式碼建立和執行面向服務(Service Oriented)應用程式的統一框架。它使得開發者能夠建立一個跨平臺的、安全、可信賴、事務性的解決方案,且能與已有系統相容協作。WCF是微軟分佈 式應用程式開發的集大成者,它整合了.Net平臺下所有的和分散式系統有關的技術,例如.Net Remoting、ASMX、WSE和MSMQ(訊息佇列)。以通訊(Communiation)範圍而論,它可以跨程式、跨機器、跨子網、企業網乃至於 Internet;以宿主程式而論,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host)。WCF可以支援的協議包括TCP,HTTP,跨程式以及自定義,安全模式則包括SAML, Kerberos,X509,使用者/密碼,自定義等多種標準與模式。也就是說,在WCF框架下,開發基於SOA的分散式系統變得容易了,微軟將所有與此相 關的技術要素都包含在內,掌握了WCF,就相當於掌握了叩開SOA大門的鑰匙。
最終目標是通過程式或不同的系統、通過本地網路或是通過Internet收發客戶和服務之間的訊息。
二、第一個WCF程式
1.我們先新建一個專案,選擇WCF中的WCF服務應用程式新建:
2.系統生成了兩個預設檔案:IService1.cs和Service1.svc,其中IService1.cs是定義介面的,Service1.svc用來實現該介面。在這兩個檔案中可以看到如下的程式碼:
// 注意: 使用“重構”選單上的“重新命名”命令,可以同時更改程式碼和配置檔案中的介面名“IService1”。
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: 在此新增您的服務操作
}
// 使用下面示例中說明的資料約定將複合型別新增到服務操作。
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
可以看到介面檔案IService1.cs裡有幾個特性分別是:[ServiceContract]、[OperationContract]、[DataContract]、[DataMember],大致的用途如下:
[ServiceContract]:指明該介面是一個WCF的服務契約,可以被外部的呼叫,不加則無法被外部呼叫。
[OperationContract]:指明該方法是一個WCF的方法契約,可以被外部的呼叫,不加則無法被外部呼叫。
[DataContract]:資料契約,指明該類是可供服務端和客戶端相互傳遞自定義資料的型別,宣告後該型別就可以被序列化在服務端和客戶端之間傳送。
[DataMember]:資料成員,宣告後的屬性可以參與到客戶端和伺服器端的類的屬性的序列化,沒有宣告的不參與序列化。
在Service1.svc中已經實現了介面中的方法,將Service1.svc設定為啟動項,後除錯會如下所示,這是vs自帶的服務測試的工具,不過無法測試非同步的服務。
雙擊左側樹狀圖中的方法GetData(),在上方輸入值後點選呼叫可以下方看到方法返回值,則說明我們的介面成功了。
三、WCF服務的使用
1.接下來對我們的WCF程式進行釋出到本地檔案,釋出的過程和WEB的專案釋出類似,釋出後我們部署到IIS上面。右鍵瀏覽Service1.svc出現如下的頁面後表明釋出成功。http://192.168.3.30:7358/Service1.svc?wsdl就是我們需要引用的服務地址。
注意如果無法釋出成功,可能是部分的Windows功能沒有開啟,如下所示。
2.新建一個新的控制檯應用程式,右鍵引用->新增服務引用->將WCF服務引用地址輸入點選確認即可引用成功。
引用成功後在Service References資料夾下出現了一個ServiceReference1服務,在控制檯程式中引用WCF服務的名稱空間using ConsoleApplication2.ServiceReference1;使用如下程式碼即可訪問服務介面。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//新增WCF的服務名稱空間
using ConsoleApplication2.ServiceReference1;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//Service1Client是在新增服務引用後伺服器端的Service1在客戶端的代理類,一般的格式都是"*Client"這種格式的
Service1Client sercive = new Service1Client();
string str = sercive.GetData(666);
Console.WriteLine("WCF服務返回值為:" + str);
Console.ReadKey();
}
}
}
返回結果如下:
相關文章
- WCF開發入門的六個步驟
- C#快速入門C#
- C#動態呼叫WCF介面C#
- C# WCF DataContractSerializer 類C#
- C#入門程式碼C#
- c#入門-while迴圈C#While
- C# 12 Blazor入門教程C#Blazor
- MongoDB for C#基礎入門MongoDBC#
- C# 範型入門 1C#
- c# orm轉貼入門C#ORM
- 《C#入門與提高》 (轉)C#
- 《C#快速入門教程》目錄C#
- c#入門教程(菜鳥級)C#
- C#快速入門教程(16)—— 介面C#
- C#快速入門教程(6)——方法C#
- c#入門-關係運算子C#
- C#控制樹莓派入門C#樹莓派
- c#入門-編譯的概念C#編譯
- 《C#入門與提高》(一) (轉)C#
- C#入門之C#特點及HelloWorld程式C#
- Roslyn入門(二)-C#語義分析ROS
- C#快速入門教程(26)—— 繪圖C#繪圖
- C#快速入門教程(8)——整數C#
- C#快速入門教程(15)—— 繼承C#繼承
- C#快速入門教程(21)—— 泛型C#泛型
- c#入門-下載開發工具C#
- Sandcastle入門:建立C#幫助文件ASTC#
- C#入門程式碼[轉載][收藏]C#
- Web API--入門--(一)ASP.NET Web API 2(C#)入門WebAPIASP.NET
- 1.5萬字長文:從 C# 入門 KafkaC#Kafka
- C#人臉識別入門篇-STEP BY STEP人臉識別--入門篇C#
- C#程式設計基礎入門教程pdfC#程式設計
- C#快速入門教程(28)—— ADO.NETC#
- C#快速入門教程(25)—— 日期與時間C#
- C#快速入門教程(30)—— 繼續學習C#
- C#快速入門教程(12)—— if語句結構C#
- C#快速入門教程(18)—— 異常處理C#
- C#快速入門教程(22)—— 常用集合型別C#型別