【发布时间】:2011-06-17 18:53:59
【问题描述】:
我有一个 Silverlight 客户端,它可以调用我的 WCF Web 服务上的一个方法来从数据库中获取值。在长查询的情况下,我想给用户取消它的选项。
客户端,当用户按下“取消”时,我在 WCF 实例上调用“.Abort()”。但是,我的 WCF 服务仍将继续运行,因为它不知道客户端不再连接。
我的问题是:WCF 服务是否有可能知道客户端已终止连接?
我曾尝试在我的合约方法中订阅 Channel.Closed/faulted 事件,但它们从未触发...
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
internal class MyContract: IMyContract
{
public object QueryDatabase(...)
{
System.ServiceModel.OperationContext.Current.Channel.Faulted += new System.EventHandler(Channel_Faulted);
System.ServiceModel.OperationContext.Current.Channel.Closed += new System.EventHandler(Channel_Faulted);
// Perform sql query
}
void Channel_Faulted(object sender, System.EventArgs e)
{
// Cancel SQL query here
}
}
有人知道怎么做吗? 谢谢!
【问题讨论】:
-
我目前正在使用 BasicHttpBinding。我看了你发布的文章,它不支持可靠的会话。如果我可以使用另一种类型的绑定(如 WSHttpBinding),我将不得不进一步调查,因为 BasicHttpBinding 最初用于更好的互操作性......