我有一个简单的Fire和Forget服务操作,可以正常工作并且不会阻塞。但是,当我尝试关闭服务代理时,它将阻塞,直到单向调用完成。这是预期的行为吗?
客户代码:
var serviceProxy = new MyServiceProxy();
serviceProxy.OneWayCall();
serviceProxy.Close(); // This blocks until OneWayCall() is finished.
服务
[ServiceContract]
public interface IMyService {
[OperationContract(IsOneWay = true)]
void OneWayCall();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MyService : IMyService {
public void OneWayCall() {
// Stuff and things
}
}
答案 0 :(得分:3)
是 - 取决于您的服务正在使用的绑定/配置以及您是否以任何方式使用会话。有关导致阻止的配置的信息,请参阅以下链接:
WCF Best Practice #5: One-way is not always really one-way
希望有所帮助
答案 1 :(得分:1)
为了完整起见;以下是微软对此行为的评价: