![](/img/trans.png)
[英]Can a WCF duplex service determine if the callback channel of a client has implemented a specific method before the service tries to call it?
[英]wcf duplex service freezes on callback call
服務合同:
[ServiceContract(CallbackContract = typeof(IClientCallBackChannel),
SessionMode = SessionMode.Required)]
public interface IServerService
{
[OperationContract(IsOneWay = true)]
void foo();
}
客戶合同:
public interface IClientCallBackChannel
{
[OperationContract(IsOneWay = false)]
object DoCommand(Command command);
}
class ClientCallBackChannelImpl
{
public object DoCommand(Command command)
{
// freezes service
serverService.foo();
// OK
new Action(() =>
{
Thread.Sleep(1000);
serverService.foo();
}
).BeginInvoke(null,null);
}
}
我有一個雙工服務,當我調用一個客戶端方法“ DoCommand”時,該方法內部有一個對Service方法foo的調用,我的服務凍結了。 如果我異步調用foo,則效果很好,但是我需要同步調用。
我認為問題在於您需要DoCommand返回一個值,因此無法使其成為OneWay。 如果您考慮這一點,這將阻止您的服務。
您可以將ServiceBehavior的ConcurrencyMode設置為Multiple,這應該可以工作,但是恕我直言,這不是最佳選擇。
當您進行雙向通信時,請嘗試堅持使用OneWay-Methods-這樣可以解決問題,並避免上述行為引起的棘手的並發問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.