我有一個提供登錄方法的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