3
我正在編程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;
}
}
我打電話回來電流通道,它是一個雙工通道。
嗨拉吉斯拉夫,我已經試過了。我也嘗試了三種解決方案:http://msdn.microsoft.com/en-us/magazine/cc163537.aspx#S4。但是,它似乎不適合我。我的情況是,如果我使用服務合約方法回撥,它會死鎖。請看我的編輯來查看代碼示例。 – 2012-07-17 01:39:44
你的客戶端應用程序是什麼? – 2012-07-17 08:05:05
我的客戶端應用程序沒有做WPF應用程序。像這樣的東西。公共部分類MainWindow:Window,ICallback {public void Callbackmethod(){}; } – 2012-07-17 09:55:35