Pau*_*hou 3 wcf asynchronous-wcf-call wcf-callbacks
我正在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();
}
Run Code Online (Sandbox Code Playgroud)
然后我在服务端实现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;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在回拨当前频道,它是一个双工频道.
如果您的操作和回调是双向的,那么您很可能遇到死锁问题.使用以下属性标记您的服务类:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class MyService : IMyServiceContract { ... }
Run Code Online (Sandbox Code Playgroud)
编辑:
同样在您的WPF应用程序中将此添加到回调实现的实现中:
[CallbackBehavior(UseSynchronizationContext = false)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1098 次 |
最近记录: |