私は現在、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 - これは別の問題ですが、それで別のQ&Aがあります。私はこの質問に対する答えを提供したと信じていますが、私に知らせていないと、私はさらに助けてくれるでしょう。参考にしておきますが、サンプルコードのMicrosoftは、[推奨される命名規則](https://msdn.microsoft.com/en-us/library/mt674882.aspx#Anchor_7)から抜け出しています。非同期関数の名前に「Async」が追加されている必要があります。それにもかかわらず、ここでは 'async'キーワードは表示されませんが、これは非同期アーキテクチャです。 – InteXX