日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
WCF程序事務(wù)相關(guān)定義與實(shí)現(xiàn)方法詳解

WCF開發(fā)工具為我們帶來(lái)了非常大的好處。它的強(qiáng)大的功能優(yōu)勢(shì)令其在開發(fā)領(lǐng)域中占據(jù)著非常重要的地位。在這里我們將會(huì)為大家詳細(xì)介紹一下有關(guān)WCF程序事務(wù)的相關(guān)定義與實(shí)現(xiàn)方法,希望能對(duì)大家有所幫助。

創(chuàng)新互聯(lián)公司于2013年開始,先為南山等服務(wù)建站,南山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為南山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

WCF程序事務(wù)定義如下:

 
 
 
  1. [ServiceContract(SessionModeSessionMode = SessionMode.Required)]  
  2. public interface IComplexService  
  3. {  
  4. [OperationContract]  
  5. [TransactionFlow(TransactionFlowOption.Mandatory)]  
  6. void ExecuteNoneQuery1(string sql);  
  7. [OperationContract]  
  8. [TransactionFlow(TransactionFlowOption.Mandatory)]  
  9. void ExecuteNoneQuery2(string sql);  
  10. [OperationContract]  
  11. [TransactionFlow(TransactionFlowOption.Mandatory)]  
  12. void ExecuteNoneQuery3(string sql);  

WCF程序事務(wù)實(shí)現(xiàn)如下:

 
 
 
  1. [ServiceBehavior(TransactionTimeout = "00:00:45",
    TransactionIsolationLevel = System.Transactions.IsolationLevel.
    Serializable)]  
  2. public class ComplexServiceImplement : IComplexService  
  3. {  
  4. private static void ExecuteNoneQuery(string sql)  
  5. {  
  6. string sqlConnectionString = "Password=sa;User 
    ID=sa;Initial Catalog=ipedf;Data Source=.";  
  7. string oraConnectionString = "User ID=sample;
    Password=sample;Data Source=insapp";  
  8. using (OracleConnection oraConnection = new OracleConnection
    (oraConnectionString))  
  9. {  
  10. try  
  11. {  
  12. oraConnection.Open();  
  13. OracleCommand cmd = oraConnection.CreateCommand();  
  14. cmd.CommandText = sql;  
  15. cmd.CommandType = CommandType.Text;  
  16. cmd.ExecuteNonQuery();  
  17. }  
  18. catch (Exception e)  
  19. {  
  20. string Debug = e.Message;  
  21. }  
  22. finally  
  23. {  
  24. oraConnection.Close();  
  25. }  
  26. }  
  27. using (SqlConnection sqlConnection = 
    new SqlConnection(sqlConnectionString))  
  28. {  
  29. try  
  30. {  
  31. sqlConnection.Open();  
  32. SqlCommand cmd = sqlConnection.CreateCommand();  
  33. cmd.CommandText = sql;  
  34. cmd.CommandType = CommandType.Text;  
  35. cmd.ExecuteNonQuery();  
  36. }  
  37. catch (Exception e)  
  38. {  
  39. string Debug = e.Message;  
  40. }  
  41. finally  
  42. {  
  43. sqlConnection.Close();  
  44. }  
  45. }  
  46. }  
  47. [OperationBehavior(  
  48. TransactionScopeRequired = true, TransactionAutoComplete = true)]  
  49. public void ExecuteNoneQuery1(string sql)  
  50. {  
  51. ExecuteNoneQuery(sql);  
  52. //OperationContext.Current.SetTransactionComplete();  
  53. }  
  54. [OperationBehavior(  
  55. TransactionScopeRequired = true, TransactionAutoComplete = true)]  
  56. public void ExecuteNoneQuery2(string sql)  
  57. {  
  58. ExecuteNoneQuery(sql);  
  59. //OperationContext.Current.SetTransactionComplete();  
  60. }  
  61. [OperationBehavior(  
  62. TransactionScopeRequired = true, TransactionAutoComplete = true)]  
  63. public void ExecuteNoneQuery3(string sql)  
  64. {  
  65. ExecuteNoneQuery(sql);  
  66. //OperationContext.Current.SetTransactionComplete();  

服務(wù)端配置如下:

 
 
 
  1. < system.serviceModel> 
  2. < !--提供的服務(wù)--> 
  3. < services> 
  4. < service name="Wf.Complex.Service.ComplexServiceImplement" 
    behaviorConfiguration="myServiceBehavior"> 
  5. < endpoint address="" binding="wsHttpBinding" bindingConfiguration=
    "transactionalWsatHttpBinding" contract=
    "Wf.Complex.Service.IComplexService"/> 
  6. < endpoint address="mex" binding="mexHttpBinding" 
    contract="IMetadataExchange"/> 
  7. < /service> 
  8. < /services> 
  9. < behaviors> 
  10. < serviceBehaviors> 
  11. < behavior name="myServiceBehavior"> 
  12. < serviceMetadata httpGetEnabled="True"/> 
  13. < serviceDebug includeExceptionDetailInFaults="False"/> 
  14. < /behavior> 
  15. < /serviceBehaviors> 
  16. < /behaviors> 
  17. < bindings> 
  18. < wsHttpBinding> 
  19. < binding name="transactionalWsatHttpBinding" transactionFlow="true"/> 
  20. < /wsHttpBinding> 
  21. < /bindings> 
  22. < /system.serviceModel> 

客戶端代碼如下:

 
 
 
  1. IComplexService complex = new ComplexServiceClient();  
  2. try  
  3. {  
  4. using (TransactionScope scope = new TransactionScope
    (TransactionScopeOption.Required))  
  5. {  
  6. string sql = "delete from student";  
  7. complex.ExecuteNoneQuery1(sql);  
  8. sql = "insert into student(id,name) values(1,'yeyang_1')";  
  9. complex.ExecuteNoneQuery2(sql);  
  10. sql = "insert into student(id,name) values(2,'yeyang_2')";  
  11. complex.ExecuteNoneQuery3(sql);  
  12. scope.Complete();  
  13. }  
  14. Console.WriteLine("succeed");  
  15. }  
  16. catch (Exception expt)  
  17. {  
  18. Console.WriteLine(expt.Message);  
  19. }  
  20. finally  
  21. {  
  22. (complex as ComplexServiceClient).Close();  

運(yùn)行結(jié)果:#t#

服務(wù)端的ExecuteNoneQuery方法中using (OracleConnection oraConnection = new OracleConnection(oraConnectionString))代碼塊發(fā)生異常,異常內(nèi)容如下:

"無(wú)法加載 DLL“oramts.dll”: 找不到指定的模塊。 (異常來(lái)自 HRESULT:0x8007007E)。"

結(jié)論:

對(duì)于數(shù)據(jù)庫(kù)事務(wù),可以通過(guò)WCF程序事務(wù)變形的方式來(lái)實(shí)現(xiàn),但必須獲取對(duì)應(yīng)數(shù)據(jù)庫(kù)產(chǎn)品的支持,sqlserver產(chǎn)品默認(rèn)支持,oracle數(shù)據(jù)庫(kù)產(chǎn)品需要考慮本風(fēng)險(xiǎn),及時(shí)規(guī)避.


分享名稱:WCF程序事務(wù)相關(guān)定義與實(shí)現(xiàn)方法詳解
文章出自:http://m.5511xx.com/article/dhhsgci.html