共用方式為


整合 Enterprise Services 異動元件

Windows Communication Foundation (WCF) 提供與 Enterprise Services 整合的自動機制 (請參閱整合 COM+ 應用程式)。 不過,您可能希望能夠彈性地開發出可透過內部方式使用裝載於 Enterprise Services 之異動元件的服務。 由於 WCF 交易功能是建置在 System.Transactions 基礎結構上,所以將 Enterprise Services 與 WCF 整合的程序就跟指定 System.Transactions 與 Enterprise Services 之間互通性的程序完全相同,如 與 Enterprise Services 和 COM+ 交易的互通性中所述。

為了在傳入的流動異動和 COM+ 內容異動之間提供所需等級的互通性,此服務的實作必須建立 TransactionScope 執行個體並使用適當的 EnterpriseServicesInteropOption 列舉值。

整合 Enterprise Services 和服務作業

下列程式碼範例會示範一項允許異動流程的作業,這項作業會建立具有 TransactionScope 選項的 Full。 下列狀況適用於本案例:

任何其他的方法呼叫也會發生在相同作業的交易範圍內。

[ServiceContract()]  
public interface ICustomerServiceContract  
{  
   [OperationContract]  
   [TransactionFlow(TransactionFlowOption.Allowed)]  
   void UpdateCustomerNameOperation(int customerID, string newCustomerName);  
}  
  
[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable)]  
public class CustomerService : ICustomerServiceContract  
{  
   [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]  
   public void UpdateCustomerNameOperation(int customerID, string newCustomerName)  
   {  
   // Create a transaction scope with full ES interop  
      using (TransactionScope ts = new TransactionScope(  
                     TransactionScopeOption.Required,  
                     new TransactionOptions(),  
                     EnterpriseServicesInteropOption.Full))  
      {  
         // Create an Enterprise Services component  
         // Call UpdateCustomer method on an Enterprise Services
         // component
  
         // Call UpdateOtherCustomerData method on an Enterprise
         // Services component
         ts.Complete();  
      }  
  
      // Do UpdateAdditionalData on an non-Enterprise Services  
      // component  
   }  
}  

如果作業的目前交易和 Enterprise Services 交易元件的呼叫之間不需要同步處理,那麼請在初始化 None 執行個體時使用 TransactionScope 選項。

整合 Enterprise Services 和用戶端

下列程式碼會示範以 TransactionScope 設定來使用 Full 執行個體的用戶端程式碼。 在此案例中,支援異動流程的服務作業呼叫會發生於呼叫 Enterprise Services 元件的相同異動範圍內,

static void Main()  
{  
    // Create a client  
    CalculatorClient client = new CalculatorClient();  
  
    // Create a transaction scope with full ES interop  
    using (TransactionScope ts = new TransactionScope(  
          TransactionScopeOption.Required,  
          new TransactionOptions(),  
          EnterpriseServicesInteropOption.Full))  
    {  
        // Call Add calculator service operation  
  
        // Create an Enterprise Services component  
  
        // Call UpdateCustomer method on an Enterprise Services
        // component
  
        ts.Complete();  
    }  
  
    // Closing the client gracefully closes the connection and
    // cleans up resources  
    client.Close();  
}  

另請參閱