我正在通過netTcp綁定使用跨WCF客戶端和服務的事務。 我已啓用DTC,交易按預期流動。測試WCF事務超時
我想測試事務超時。超時
<behavior name="Services.Behavior.NetTcp">
<serviceTimeouts transactionTimeout="00:00:01"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
和服務端點
客戶端發起的事務中
using (TransactionScope scope =
new TransactionScope(TransactionScopeOption.Required,new TimeSpan(0,0,1,0)))
{
...
在服務,我已經啓用了交易行爲,
<service behaviorConfiguration="Services.Behavior.NetTcp"
name="Services.Accounts.AccountsService">
<endpoint binding="netTcpBinding" bindingConfiguration="TranNetTcpBinding"
contract="Services.Accounts.Interfaces.IAccountsService" />
<endpoint address="mex" binding="mexTcpBinding" name="MexTcp" contract="Services.Accounts.Interfaces.IAccountsService" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:2222/Accounts"/>
</baseAddresses>
</host>
</service>
,並使用默認服務的默認交易範圍也爲
using (TransactionScope ts = new TransactionScope())
{
但我沒有從服務中獲取事務超時。如果我從1分鐘減少客戶端超時,我可以看到交易超時。
我知道如果我使用服務上的事務選項,它不會從配置文件讀取超時值,在這裏我沒有使用任何這些選項。
任何想法爲什麼事務不會從服務超時,即使transactionTimeout爲1秒,這是我沒有足夠的時間來完成操作。
如何檢查運行時服務上設置的超時值?
更新1:
從Jual洛伊的編程WCF服務的書:
當一個事務流入配置有比傳入事務較短的超時服務,交易採用該服務的超時,和服務可以執行較短的超時。當事務流入配置了比傳入事務更長的超時的服務時,服務配置不起作用。
來自Lerox Bustamante:From the webcast 提到,如果服務超時加入現有的事務沒有效果,這與Jual所說的完全相反。
更新2:
自考我可以證實,布斯塔曼特是正確的。 如果我申請在服務接口方法的簽名如下屬性,
[TransactionFlow(TransactionFlowOption.NotAllowed)]
不允許客戶端事務流動,並創建一個新的事務,由於在服務實現屬性的使用,
[OperationBehavior(TransactionScopeRequired = true)]
從服務配置文件中獲取指定的超時時間並正確超時。
感謝
這將增加運行時間並沒有涉及到的交易。 – skjagini 2009-10-08 15:55:09