0

我有一个依赖单向 WCF 服务的 Windows 窗体应用程序;它只是从(Oracle)数据库返回数据。一些客户端对 wcf 的调用是长时间运行的,现在我们需要实现一种异步捕获 Oracle 的 DBMS_output 并将其发送到客户端的方法。如何使用可以连接到 WCF 的 SignalR 或类似方法来实现?我们正在使用 .NET 框架 4.5。

4

2 回答 2

2

@kims 的答案是正确的,但为了进一步解释,我将添加一个控制器示例。只是表明可以开始工作,然后稍后将发布一条消息...

/// <summary>
/// A realtime controller
/// </summary>
public class ZooController : XSocketController
{
    /// <summary>
    /// This method will be hit both from JavaScript, WCF and MVC examples
    /// Could have sent a custom object as well, but settled for a string in this case.
    /// </summary>
    /// <param name="message"></param>
    public void Say(string message)
    {

        //Just send it out to all subscribers
        this.SendToAll(new {message = "Longrunning process started"}, "say");

        Thread.Sleep(10000);

        this.SendToAll(new {message}, "say");
        //You can also use
        //this.Send, this.SendTo<T> etc...
    }
}

编辑:我不知道您的情况,但也许您可以使用此处描述的长期运行控制器选项

于 2014-04-13T07:49:19.517 回答
1

由于 XSockets 在问题中被标记...

我会在客户端订阅一个主题,并在长时间运行的任务完成后让实时框架发布结果。

可以在此处找到有关如何将 WCF 提升为实时的简单示例:XSockets WCF 该示例只是立即发布结果,但如果 XSockets 中调用的方法启动长时间运行的任务并在完成时发布结果,客户端将在何时收到通知工作完成了。

从 WCF(或另一个半双工进程)调用 XSockets 控制器只需两行代码

//Get a connection (if it exists already that one will be used)
var conn = ClientPool.GetInstance("ws://127.0.0.1:4502/Zoo", "*");

//We send an anonymous message here, but any object will work.
conn.Send(new { message = "I was sent over WebSockets: " + message },"Say");
于 2014-04-13T07:38:27.947 回答