【发布时间】:2012-07-16 08:36:16
【问题描述】:
我正在 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;
}
}
我在当前频道回拨,是双工频道。
【问题讨论】:
标签: wcf wcf-callbacks asynchronous-wcf-call