我刚刚完成了我的 c# 控制台应用程序的编写,我正在考虑在其中嵌入一个 Web 服务器(可能是这个http://webserver.codeplex.com)。不过,我在高级网络编码方面并没有做太多事情,所以我不确定我是否能做我需要做的事情。
基本上,我希望允许用户通过访问我的应用程序所服务的站点来实时查看我的应用程序的控制台输出。如果我理解正确,做这样的事情需要 AJAX,一个简单的 C# Web 服务器将无法处理。
这是正确的还是有一种简单的方法可以做到这一点我错过了?
我刚刚完成了我的 c# 控制台应用程序的编写,我正在考虑在其中嵌入一个 Web 服务器(可能是这个http://webserver.codeplex.com)。不过,我在高级网络编码方面并没有做太多事情,所以我不确定我是否能做我需要做的事情。
基本上,我希望允许用户通过访问我的应用程序所服务的站点来实时查看我的应用程序的控制台输出。如果我理解正确,做这样的事情需要 AJAX,一个简单的 C# Web 服务器将无法处理。
这是正确的还是有一种简单的方法可以做到这一点我错过了?
如何重新路由控制台输出
您需要自己编写TextWriter
并Console
通过Console.SetOut
. 该作者应通知已连接的 Web 客户端以及原始Console.Out
.
如何托管类似 COMET 的服务器
您可以使用HttpListener
一些基本的异步编程来执行此操作。如果您将其包装HttpListenerContext.Response.OutputStream
在一个StreamWriter
(AutoFlush
设置为true
)并设置HttpListenerContext.Response.SendChunked
为true
客户端将收到部分结果 - 这意味着您甚至可以在 IFRAME 中执行此操作。
如果启用了 UAC,您将需要为自己的 URL 添加权限:
netsh http add urlacl url=http://+:9090/ user=domain\username
代码?
我无法抗拒;我写了一个(测试不佳且大多不完整)样本。
这是不正确的。
AJAX 是一种依赖于 JavaScript 的客户端技术。只要 Web 服务器可以响应 HTTP 请求,它就可以提供AJAX 内容(无论这意味着什么:-)。
我会使用这个UtilDev Cassini作为我选择的嵌入式 Web 服务器,它基于来自嵌入式 Visual Studio 开发服务器的代码,并且几乎可以运行在 IIS 中运行的任何东西。AJAX 是一种浏览器技术而不是服务器技术,服务器只是看到 http 请求与任何其他请求相同。我的最后一点是,在控制台应用程序中嵌入 Web 服务器似乎有点奇怪。使用 Windows 服务执行此操作会更常见。您是否考虑过将控制台应用程序转换为 Windows 服务?