WCF 分布式事務 應用

2021-05-28 13:49:50 字數 2237 閱讀 5170

wcf 支援分布式事務,也就是說事務可以跨越服務、程序、機器邊界,在多個服務和客戶端間存在.那麼在wcf中如何使用分布式事務呢?

下面我們以乙個例子來演示在wcf中使用分布式事務。

為了便於測試,我們在建立乙個臨時表用於測試。表名為mgender.表中有兩個字段:gendercode,char(1),genderdesc varchar(20).

在這個solution中wcftrasactionservcies是contract 和service。它是乙個類庫專案,在這裡為了方便我們將inte***ct和實現inte***ct寫在乙個cs檔案裡,當然這種方法是不被推薦的。**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.servicemodel;

using system.data.sqlclient;

namespace wcftrasactionservices

[servicecontract(sessionmode=sessionmode.required)]

public inte***ce igenderinsert2

public class testservice1 : igenderinsert1

}#endregion

}public class testservice2 : igenderinsert2

}#endregion}}

transactionflowattribute 只能用於服務方法(operation/method)上,它允許我們進行不同的事務參與設定。有一點要注意,我們不能為 isoneway=true 的服務設定事務支援。

transactionflowoption.notallowed: 不參與任何事務。(預設值)

transactionflowoption.allowed: 允許參與事務。也就是說,如果呼叫方(客戶端)和服務binding啟用了事務,則參與。

transactionflowoption.mandatory: 強制啟用事務。呼叫方(客戶端)和服務 binding 必須啟用事務才能呼叫本服務。

wcftrasactionhost是host,為了讓wcf支援分布式事務,我們要修改binding的一些屬性。只有 tcp-、 ipc- 以及 ws-related 等 binding 支援事務。預設情況下,這些 binding 並不會參與事務,需要我們顯示將 transactionflow 屬性設定為 true 才行。

我們可以通過配置檔案來設定

當然也可以使用**:

nettcpbinding tcpbinding = new nettcpbinding( );

tcpbinding.transactionflow = true;

wcftrasactionhost是乙個控制台應用程式,它的**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.servicemodel;

namespace wcftrasactionhost

} }wcftrasactionhost配置檔案:

<?xml version="1.0" encoding="utf-8" ?>

wcftrasactionclient:是client.我們使用svcutil 工具生成客戶端**,生成兩個cs檔案,testservice1.cs和testservice2.cs,當然我們也可以手工寫客戶端類。

wcftrasactionclient**:

class program

catch

finally}}

這樣我們就可以成功的往表mgender中插入兩條資料。如果我們修改 :

test1.insertgerder1("m", "male"); test2.insertgerder2("f"female");修改為 test1.insertgerder1("m", "male"); test2.insertgerder2("ff"female");

這樣就會有異常,因為ff是兩位字元,而gendercode是char1型的,所以事務不成功,但第一條資料也成功插入,所以wcf會自動回滾第一插入的資料 test1.insertgerder1("m", "male");

WCF系列 分布式事務

跟wcf 相關的事務協議有三個。這是個輕量級的本地事務協議,限制管理在乙個 中的事務。不能跨 邊界傳播事務,也不能跨服務邊界傳播事務。跟其他協議比,lightweight protocol 是最有效率的協議。這個協議可用於跨 程序和機器邊界,管理兩階段提交的事務協議。這個跨邊界的事務協議使用 rpc...

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

WCF框架 分布式框架WCF

windows communication foundation wcf 是由微軟開發的一系列支援資料通訊的應用程式框架,可以翻譯為windows 通訊開發平台。整合了原有的windows通訊的 net remoting,webservice,socket的機制,並融合有http和ftp的相關技術。...