我有一个提供登录方法的WCF服务。客户需要调用此方法(因为它是唯一的IsInitiating = true)。这种方法应该返回一个描述调用成功的字符串。如果登录失败,连接应该关闭。WCF:如何正常关闭连接时发送数据?
问题是关闭的时间。我想发送返回值,然后立即关闭连接。
string Login (string name, string pass)
{
if (name != pass) {
OperationContext.Current.Channel.Close();
return "fail";
}
else {
return "yay";
}
}
的MSDN状态,该信道
上调用
Close
导致ICommunicationObject到 从打开状态 优雅地转换到关闭状态。关闭 方法允许任何未完成的工作返回前完成 。例如,对于 示例,完成发送任何缓冲的 消息)。
这对我没有帮助(或者我的理解是错误的),因为close立即执行 - WCF不会等待Login方法完成执行并返回一个字符串,但会关闭之前的连接。
因此,我认为调用Close并不等待正在运行的方法完成。现在,我还能如何返回一个值,,然后关闭?
在我的绝望中,我尝试了以下方法,但它不是一个严肃的解决方案。
new Thread (() => {
Thread.Sleep (100);
OperationContext.Current.Channel.Close();
}).Start();
好的解释!是的,那正是我想要的。 OperationCompleted事件听起来像个不错的主意,我会尝试。关于证书系统:我认为这在我的具体情况下是过分的,但我会记住并稍后看看。 – mafu 2010-04-10 12:31:38