我正在 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;
}
}
我在当前频道回拨,这是一个双工频道。