【问题标题】:C# Web Server for displaying Console Output?用于显示控制台输出的 C# Web 服务器?
【发布时间】:2026-01-02 14:25:02
【问题描述】:

我刚刚完成了我的 c# 控制台应用程序的编写,我正在考虑在其中嵌入一个 Web 服务器(可能是这个http://webserver.codeplex.com)。不过,我在高级网络编码方面并没有做太多事情,所以我不确定我是否能做我需要做的事情。

基本上,我希望允许用户通过访问我的应用程序所服务的站点来实时查看我的应用程序的控制台输出。如果我理解正确,做这样的事情需要 AJAX,一个简单的 C# Web 服务器将无法处理。

这是正确的,还是有一种我想念的简单方法?

【问题讨论】:

  • 您不需要 AJAX 来定期刷新 html 页面。这取决于控制台输出更改的频率。
  • 哦,您是否考虑过自托管全双工 WCF 服务和 silverlight 应用程序?

标签: c# .net ajax webserver embeddedwebserver


【解决方案1】:

如何重新路由控制台输出

您需要编写自己的TextWriter 并通过Console.SetOut 使Console 使用它。这位作者应该通知已连接的网络客户端,以及原来的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

代码?

我无法抗拒;我写了一个(测试不佳且大部分不完整)sample

【讨论】:

  • 哇,非常感谢!我期待着检查一下:)
  • 它不适用于 log4Net。我已经阅读了 appender 的源代码及其使用 'Console.Write(...)',但是 Console.SetOut(this); & Console.SetError(this);仅侦听本地应用程序 Console.Write。知道如何解决这个问题吗?也许将您的代码翻译成 Log4Net Appender。世界可以如此简单......
【解决方案2】:

这是不正确的。

AJAX 是一种依赖于 JavaScript 的客户端技术。只要网络服务器可以响应 HTTP 请求,它就可以提供 AJAX 内容(无论这意味着什么:-)。

【讨论】:

    【解决方案3】:

    我会使用这个UtilDev Cassini 作为我选择的嵌入式 Web 服务器,它基于来自嵌入式 Visual Studio 开发服务器的代码,并且几乎可以运行在 IIS 中运行的任何东西。 AJAX 是一种浏览器技术而不是服务器技术,服务器只是看到 http 请求与任何其他请求相同。我的最后一点是,在控制台应用程序中嵌入 Web 服务器似乎有点奇怪。使用 Windows 服务执行此操作会更常见。您是否考虑过将控制台应用程序转换为 Windows 服务?

    【讨论】:

    • 请注意,我的应用程序是作为 Windows 服务运行的。我没有详细介绍完整的细节以保持问题简短,但网页的原因是因为用户从未看到控制台。