我目前正在開發一個項目,我必須通過wcf客戶端來管理一個應用程序。我面臨的問題是,在打電話給服務器之後,我需要客戶端等待回調。這裏是場景:讓wcf客戶端等待回調
我打電話給服務,顯示一個窗口,然後服務器應用程序是空閒的。當我點擊窗口上的一個按鈕時,它會回調客戶端。在此期間,客戶端UI必須被禁用 - 它必須等待回調。你能告訴我怎樣才能做到這一點?它與「併發模式」或「操作合同」屬性有關嗎?
這是我的的ServiceContract和CallbackContract代碼:
[ServiceContract(CallbackContract = typeof(IWCFServiceCallback))]
public interface IWCFService
{
[OperationContract]
void OpenWindow();
}
public interface IWCFServiceCallback
{
[OperationContract(IsOneWay = true)]
void ReturnValue(object[] value);
}
感謝您的回覆。我會在調用一個方法之後添加一個方法,我希望客戶端的行爲與方法本身返回值(不帶回調)相同 - 客戶端一直等到服務完成其工作並返回一個值。我無法手動鎖定UI,因爲客戶端是一個Excel插件,它沒有我可以禁用的窗體/窗口。 – Bartek
在Excel打開FunctionWizard時調用服務,所以我不能鎖定單元格,因爲它會導致Excel崩潰。 – Bartek
@Bartek - 然後,這是一個不同的問題,單獨的問答。我相信我已經提供了這個問題的答案,但是如果不讓我知道,我會盡力進一步提供幫助。僅供參考請注意,微軟在其示例代碼中偏離了其自己的[推薦命名約定](https://msdn.microsoft.com/en-us/library/mt674882.aspx#Anchor_7)。異步函數應該在其名稱後附加「Async」。當然,我們在這裏看不到'async'關鍵字,但這仍然是一個異步體系結構。 – InteXX