使用 Websocket 的 Web 应用程序的虚拟控制台
Virtual Console for Web App Using Websockets
我有一个由Windows服务承载的WCF服务。当存在命令参数时,它也可以作为控制台程序运行。它有一个接口使用 MSMQIntegrationBinding,另一个接口绑定到 HTTP 以获取服务实用程序方法。这很好用。 我有一个 Web 应用程序(为 IE 11 编写),允许用户监视服务并执行实用程序方法。代码中有许多 Console.WriteLines 显然不会显示代码是否作为服务运行。
我的老板现在要求他能够在控制台中查看正在运行的服务,就像它作为控制台应用程序运行一样。我想向我的 Web 应用程序添加新的虚拟控制台窗口,该窗口只会在服务器上出现新的 Console.WriteLines 时显示它们。我想我可以在我的 wcf 服务中编写一个函数,该函数将接受消息作为字符串,执行 Console.WriteLine,然后将消息推送到任何侦听客户端,例如我的 Web 应用程序控制台窗口。我正在考虑在客户端上使用javascript。
我已经阅读了有关将Websockets与netHttpBinding用于WCF服务的信息,这就是我想采用的方法。 但是,我看到的示例似乎是双向的,例如聊天窗口 (http://www.codeproject.com/Articles/619343/Using-WebSocket-in-NET-4-5-Part-3),它只是向客户端回显消息。 我想要单向服务器到客户端消息传递。有人可以帮忙吗?这是我最新的代码尝试:
伊姆洛格.VB
<ServiceContract(CallbackContract:=GetType(IWMLogger_MessageCallback))>
Public Interface IWMLogger_ClientListener
<OperationContract(IsOneWay:=True)>
Function ListenForServerMessages() As Task
End Interface
<ServiceContract>
Interface IWMLogger_MessageCallback
<OperationContract(IsOneWay:=True)>
Function SendMessageToClient(ByVal msg As String) As Task
End Interface
威姆洛格.VB
<ServiceBehavior(InstanceContextMode:=InstanceContextMode.Single)> _
Public Class WMLogger_Service
Implements IWMLogger_Service, IWMLogger_Service_MSMQ, IWMLogger_ClientListener
Public Async Function ListenForServerMessages() As Task Implements IWMLogger_ClientListener.ListenForServerMessages
Dim callback = OperationContext.Current.GetCallbackChannel(Of IWMLogger_MessageCallback)()
If DirectCast(callback, IChannel).State = CommunicationState.Opened Then
'Not sure what to do here
'Await callback.SendMessageToClient(
End If
End Function
End Class
你研究过SignalR吗?就我个人而言,我会走这条路,让在 Web 服务器上运行的控制台应用注册到与客户端相同的 SignalR 中心(即你的 Web 应用将托管 SignalR 中心)。然后使用控制台应用将消息推送到 Web 应用上的 SignalR 中心,这会将它们中继到所有侦听客户端(给定正确的设置)。
WCF 路由的缺点是通常的配置噩梦,当然是可能的 - 但在我的选择中,不像 SignalR 那么简单。
您是否看到以下堆栈溢出问题,以便很好地比较使用 SignalR 与 WCF 将数据推送到客户端的 WCF 和 SignalR 数据?
有一些很棒的教程 http://www.asp.net/signalr
我最终选择了最终有效的 SignalR 解决方案。我认为这可能有点矫枉过正,但我很高兴它有效。
请参阅我的答案:WCF SSE via SignalR
感谢您的所有建议。
- 使用 Websocket 的 Web 应用程序的虚拟控制台
- 是否可以将 ASP.NET Web 应用程序上载到 VMware 上的虚拟 2008 服务器上
- 为什么我的应用程序没有到达控制台.log
- 如何在node.js控制台应用程序中应用模块模式
- 是否可以使用 nw.js 构建控制台应用程序
- C# - 通过控制台应用程序访问 Javascript 修改的 HTML
- 我应该在 JavaScript 应用程序中保留控制台语句吗?
- 在我的 chrome 网上商店应用程序中禁用检查元素/JavaScript 控制台
- 循环访问未显示在 Express 应用程序中的虚拟数据
- 创建一个“可安装”的 npm 控制台应用程序(如 Yeoman 或 Gurp 或 Grunt 等)
- 如何在用JavaScript或NodeJs编写的控制台应用程序中制作加载动画
- 打开虚拟键盘时,我的应用程序网页视图不会缩小
- 需要帮助将此代码获取到控制台应用程序
- 在我的visual studio应用程序页面中显示正在运行的控制台程序数据输出
- 禁用以显示我的应用程序不工作的控制台(F12可以,但不能禁用CLT+SHFT+I)
- 如何将node-js控制台应用程序打包为可执行文件
- 用于控制台的Javascript资源,如web应用程序
- 将现有的控制台应用程序移植到Windows Azure
- Javascript发送字符串到控制台应用程序
- SignalR可以用于从控制台应用程序发送消息吗?该消息将显示在浏览器中