用于 html、json 和 websockets 的自托管 Web 服务器所需的方向

Posted

技术标签:

【中文标题】用于 html、json 和 websockets 的自托管 Web 服务器所需的方向【英文标题】:Direction needed for self hosted web server for html, json and websockets 【发布时间】:2011-11-16 22:32:49 【问题描述】:

背景

我有一个用 C# 编写的 Windows 控制台应用程序,它需要 UI。我开始使用 WPF,但由于我来自 web 背景,我想使用 html 和 html5 的一些功能,包括用于与另一个应用程序实时通信的 web 套接字。 最初,我将使用 Web 浏览器作为 UI,但稍后我可能会在主应用程序中托管 Web 浏览器。这一点我暂时不关心。

经过大量的谷歌搜索/阅读后,我正在兜圈子。看起来 WCF 可用于提供 html、基于 json 的 Web 服务以及可能的 Web 套接字流。 很多谷歌搜索的信息都与 .NET 4.0 之前的社区项目有关。即使在 4.0 之后,也有几个 NuGet 包在我看来与框架中已有的内容重叠。对于 WCF 菜鸟来说,这完全是一个雷区。

那么,我应该将精力集中在 .NET 4.0 WCF 的哪些领域以及各种开源项目上。

要求

我需要一个轻量级的自托管网络服务器。它不能基于 IIS,因为用户不会安装它。服务器(或服务器)必须:

    能够提供完整的网页,包括 html、链接图像、css 和 js 文件。 C# MiniHttpd 做得很好,但不是基于 http.sys。 HttpListener 似乎是我想要的核心,但是我还没有找到一个完整的基于它的web服务器项目。 [可选] 能够通过 asp.net 或 razor 解析这些页面 能够通过 json 响应 web 服务调用。这一点我有一个使用 System.ServiceModel 的工作示例。这是正确的方法吗? 能够使用新兴的 Web Sockets 标准。 SuperWebSocket 正在积极开发中,但似乎不是基于 http.sys 或 wcf。

偏好

我更愿意坚持使用一个基本堆栈来满足我的所有 3 个主要要求 - 我怀疑 WCF 可能就是那个平台。 我更喜欢基于 http.sys 的方法来满足所有三个要求,因此我可以保留相关的 url/port/namespace 组合并防止与其他 Web 服务器或服务发生冲突

虽然其他 SO 问题可能对我的要求的各个方面有所帮助,但我需要有关更全面方法的建议。

【问题讨论】:

【参考方案1】:

好的,回答我自己的问题感觉不对,但是...

我后来发现了一篇很棒的 CodeProject 文章,它提供了一个易于使用的自托管 Web 服务器,用于提供 html、css、js 和图像,并提供 json 请求。

Developing Web 2.0 User Interface for Self Hosted WCF Services using HTML5, CSS3 and JQuery

我仍然需要确定一个 WebSockets 解决方案,但上述项目已经尽可能接近我目前所需要的。它不支持渲染 asp.net 或 razor,但这些是我的最低优先级,因为我很高兴只使用纯 html 和 javascript 作为前端。

以后我会尝试发布更具体的问题:)

【讨论】:

【参考方案2】:

除了您的 WebSocket 支持要求外,OpenRasta framework 目前支持您所描述的内容。它绝对可以在 http.sys 中运行,并且可以用于创建 REST 服务和作为 Web 应用平台。它还支持 Razor 和其他视图引擎。 link page 中间有一个很好的比较图表,可以将其与 ASP.NET MVC & WCF 进行比较。

【讨论】:

我对任何带有“框架”一词的东西都感到紧张(听起来很重量级),但我很乐意看看。 它当然不是重量级的:它没有要继承的基类,它使用流畅的配置,并且它具有 HTTP 特性规范的简单实现。 build a website walkthrough 将让您了解应用代码的外观。 它是一个应用程序框架,就像 asp.net、fubu 等一样,但它是轻量级的,它已经存在了很长时间,并且背后有一个强大的社区。再说一次,我会说... :)【参考方案3】:

2014 年 3 月,符合我最初要求的解决方案是 ASP.NET Web Api。它可以是自托管的,并且显然也可以设置为提供 html 等。 Is it possible to serve a web page from a self hosted web API in a windows service?

【讨论】:

以上是关于用于 html、json 和 websockets 的自托管 Web 服务器所需的方向的主要内容,如果未能解决你的问题,请参考以下文章

通过 websockets 以 JSON 格式发送事件

多个 HTML5 WebSocket 连接

如何将 HTML5 WebSockets 用于 Chrome 扩展

我可以将 HTML5 WebSockets 用于通常使用 AJAX 完成的任务吗?

用于大量数据的 WebSockets 与 XHR

用于在画布上显示图像的简单 websocket