私はWCFが初めてです。私は現在、ここに投稿された最後の質問で説明したプロジェクトに取り組んでいます --> c# で別のサーバーへのコールバックを実装するにはどうすればよいですか
例を使ってコールバックを勉強しようとしています。サービスのホストにはコンソール アプリケーションを使用し、クライアントには Windows フォームを使用します。Windows フォームではなく、コンソール アプリケーションを使用してサーバー B を実行する必要があります。私が単独でサービスを実行したときは、すべて問題ありませんでした。しかし、サーバー B (クライアント) を実行すると、エラーが表示されました。
「サーバーは意味のある応答を提供しませんでした。これは、コントラクトの不一致、時期尚早のセッション シャットダウン、または内部サーバー エラーが原因である可能性があります。」
私のserverB(クライアント)コードでこのコードを指していました:
public void NotifySubscribe(string subscriberName)
{
SendOrPostCallback callback =
delegate (object state)
{
Console.WriteLine(String.Format("{0} has subscribe to service", state.ToString()));
Console.WriteLine(subscriberName);
Console.Read();
};
_uiSyncContext.Post(callback, subscriberName);
}
私が持っている例からほとんどすべてを模倣しました。これは、上記のコードの元のコードです。
public void NotifyGuestJoinedParty(string guestName)
{
// The UI thread won't be handling the callback, but it is the only one allowed to update the controls.
// So, we will dispatch the UI update back to the UI sync context.
SendOrPostCallback callback =
delegate (object state)
{ this.WritePartyLogMessage(String.Format("{0} has joined the party.", state.ToString())); };
_uiSyncContext.Post(callback, guestName);
}
private void WritePartyLogMessage(string message)
{
string format = this.txtPartyLog.Text.Length > 0 ? "{0}\r\n{1} {2}" : "{0}{1} {2}";
this.txtPartyLog.Text = String.Format(format, this.txtPartyLog.Text, DateTime.Now.ToShortTimeString(), message);
this.txtPartyLog.SelectionStart = this.txtPartyLog.Text.Length - 1;
this.txtPartyLog.ScrollToCaret();
}
プロジェクトでコンソール アプリケーションを使用しているため、テキスト ボックスではなく、Console.writeline(); を使用して記述します。コード内のデリゲート(オブジェクトの状態)に関するものかどうかはわかりません。応答してください。バグを修正する方法がわかりません。ありがとうございました。