[英]invoke callback during the execution of a contract operation
我正在Azure上編寫WCF服務。
在我的服務中,我需要在執行合同操作期間調用回調。 當我嘗試這樣做時,將拋出異常並且客戶端將被鎖定。 我認為這是因為通道打開合同操作,調用當前通道中的回調會鎖定線程,對不對? 我想為這種情況獲得解決方案。
這是超時異常消息:
發送到net.tcp://127.255.0.0:8000 / MytestWCFService的請求操作未在配置的超時(00:00:59.9889989)內收到回復。 分配給此操作的時間可能是較長超時的一部分。 這可能是因為服務仍在處理操作,或者因為服務無法發送回復消息。 請考慮增加操作超時(通過將通道/代理強制轉換為IContextChannel並設置OperationTimeout屬性)並確保該服務能夠連接到客戶端。
編輯:代碼示例
[ServiceContract(Namespace="testnamespace")]
public interface ICallback
{
[OperationContract(IsOneWay=true)]
void Callbackmethod();
}
然后我在服務端實現IContract:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,
ConcurrencyMode=ConcurrencyMode.Reentrant,
AddressFilterMode=AddressFilterMode.Any)]
public class WCFService : IContract
{
public int Add(int a, int b)
{
int result = a + b;
ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
callback.Callbackmethod();
return result;
}
}
我正在回撥當前頻道,它是一個雙工頻道。
如果您的操作和回調是雙向的,那么您很可能遇到死鎖問題。 使用以下屬性標記您的服務類:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class MyService : IMyServiceContract { ... }
編輯:
同樣在您的WPF應用程序中將此添加到回調實現的實現中:
[CallbackBehavior(UseSynchronizationContext = false)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.