1

我是 WCF 的新手。我目前正在开发一个项目,我在此处发布的最后一个问题中进行了解释-->如何在 c# 中实现对另一台服务器的回调

我正在尝试用一个例子来研究回调。它使用控制台应用程序来托管服务,并使用 Windows 窗体来托管客户端。我必须使用控制台应用程序而不是 Windows 窗体运行我的服务器 B。当我单独运行该服务时,一切都很好。但是当我运行我的服务器 B(客户端)时,显示了一个错误:

“服务器没有提供有意义的回复;这可能是由于合同不匹配、会话过早关闭或内部服务器错误造成的。”

它在我的 serverB(client) 代码中指向此代码:

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(); 编写它。我不知道它是否与代码中的委托(对象状态)有关。请回复。我不知道如何修复错误。谢谢你。

4

1 回答 1

0

我也是 WCF 的新手。

我相信您无法在使用双工服务的控制台应用程序中执行此类操作。这个问题是 5 个月前提出的,所以我想你已经找到了你想要的答案。如果我错了,请纠正我。我会很感激的。

于 2013-03-14T21:48:19.327 回答