wcf服務可以關閉嗎,WCF Transaction

 2023-10-30 阅读 21 评论 0

摘要:TransactionFlowOption有三個選項:   一為NotAllowed,這代表了禁止客戶端傳播事務流到服務端,即使客戶端啟動了事務,該事務也會被忽略;   二為Allowed,這代表允許客戶端的事務傳播到服務端,但服務器端不一定會引用到此事務;  

TransactionFlowOption有三個選項:

  一為NotAllowed,這代表了禁止客戶端傳播事務流到服務端,即使客戶端啟動了事務,該事務也會被忽略;

  二為Allowed,這代表允許客戶端的事務傳播到服務端,但服務器端不一定會引用到此事務;

  三為Mandatory,這代表服務端與客戶端必須同時啟動事務流,否則就會拋出InvalidOperationException異常。

wcf服務可以關閉嗎,?

?

[ServiceContract(SessionMode=SessionMode.Required)]
? public interface IOrdersService
? {
??? [OperationContract]
??? [TransactionFlow(TransactionFlowOption.Mandatory)]
??? string PlaceOrder(Order order);
? }

? [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, TransactionAutoCompleteOnSessionClose=true)]
? public class OrdersService : IOrdersService
??? [OperationBehavior(TransactionScopeRequired=true,
????? TransactionAutoComplete=false)]
??? public string PlaceOrder(Order order)
??? {
????? using (var conn = new SqlConnection(connString))
????? {
??????? var cmd = new SqlCommand("Insert Orders (CustomerId) Values( @customerId)", conn);
??????? cmd.Parameters.Add(new SqlParameter("@customerId", order.CustomerId));

??????? try
??????? {
????????? conn.Open();
????????? if (cmd.ExecuteNonQuery() <= 0)
????????? {
??????????? return "The order was not placed";
????????? }

????????? cmd = new SqlCommand("Select Max(OrderId) From Orders Where CustomerId = @customerId", conn);
????????? cmd.Parameters.Add(new SqlParameter("@customerId", order.CustomerId));

????????? using (SqlDataReader reader = cmd.ExecuteReader())
????????? {
??????????? while (reader.Read())
??????????? {
????????????? orderId = Convert.ToInt32(reader[0].ToString());
??????????? }
????????? }
????????? return string.Format("Order {0} was placed", orderId);
??????? }
??????? catch (Exception ex)
??????? {
????????? throw new FaultException(ex.Message);
??????? }
????? }
??? }

??? [OperationBehavior(TransactionScopeRequired = true,
????? TransactionAutoComplete = false)]
??? public string AdjustInventory(int productId, int quantity)
??? {
????? using (var conn = new SqlConnection(connString))
????? {
??????? var cmd = new SqlCommand("Update Products Set OnHand = 1 Where ProductId = @productId", conn);
??????? cmd.Parameters.Add(new SqlParameter("@quantity", quantity));

??????? try
??????? {
????????? conn.Open();
????????? if (cmd.ExecuteNonQuery() <= 0)
????????? {
??????????? return "The inventory was not updated";
????????? }
????????? else
????????? {
??????????? return "The inventory was updated";
????????? }
??????? }
??????? catch (Exception ex)
??????? {
????????? throw new FaultException(ex.Message);
??????? }
????? }
??? }

----------------------client---------------------------
????? using (var tranScope = new TransactionScope())
????? {
??????? proxy = new OrdersServiceClient("WSHttpBinding_IOrdersService");
??????? {
????????? try
????????? {
??????????? result = proxy.PlaceOrder(order);

??????????? tranScope.Commit();
????????? }
????????? catch (FaultException faultEx)
????????? {
????????? }
????? }

轉載于:https://www.cnblogs.com/webglcn/archive/2012/05/03/2480450.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/164761.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息