ASP.NET 和 IIS 需要什么?
What do I need out of ASP.NET and IIS?
我是 C#/.NET 的新手
- 为什么ASP.NET有这么多不同的项目可供选择? (Web 应用程序、Web API、网站、MVC 等)。我只想监听一个 tcp 端口,以及一种发送响应的方式。如果有库可以帮助我完成常规工作,例如构建 HTTP 请求、解析 header 等,那就太棒了。但我不想要一个试图在阳光下做任何事情的超级固执己见的框架。
- 为什么我需要 IIS?
Why does ASP.NET have so many different choices of projcets? (Web Application, Web API, Web Site, MVC ect). I just want to listen on a tcp port, and a way to send a response. etc...
因为每个项目都有自己的目的。
如果你想只是监听TCP端口那么你可以去学习微软的Katana OWIN(但我很怀疑这是否是你想要的) .
Katana OWIN
简要介绍每个项目的目的:
- "Web Application" 实际上会打开另一个 window 并让您从以下选项中进行选择:
- Web API 用于公开 RESTful 服务或 JSON 数据。
- Web Forms 用于制作使用 Web Form 组件的网页。
(有点像Windows Forms,但是Web)
- MVC 用于制作模型-视图-控制器 Web 应用程序。这是您构建具有关注点分离的组件的地方。数据模型。查看用户看到的内容。用于控制页面行为方式的控制器。
Why do I need IIS at all?
IIS 用于服务 .NET 应用程序。
没有它,将很难为 .NET 应用程序提供服务。
我将从 2 开始,然后继续您的第一个问题。 IIS 将 运行 您需要的任何 .NET Web 服务,无论是庞大的 WCF 服务、ASP.NET 应用程序还是最基本的 http 处理程序。
据我所知,ISS 是使用 .NET Web 服务的最直接方式。如果你习惯了 PHP,它基本上是 LAMP 或 .NET 的 WAMP,这意味着它有点必要。正如 Mike Goodwin 指出的那样,还有其他选择,但我必须承认我对那些第三方不熟悉。由于用一层替换另一层意义不大,我会坚持 "normal" 程序。
由于您不希望框架为您执行大量操作,因此最好的选择可能是:
- 创建一个基本的 ASP.NET 项目
- 删除默认的 ASP.Net 页面,因为您似乎不需要它
- 向您的项目添加一个通用处理程序。这将产生一个 myFile.ashx,它处理 http 请求并让你构建任何你想要的响应
当然,如果您不想为 IIS 配置操心,您需要有人在 IIS 上设置 URL 并将其映射到您的处理程序存储库。
编辑:
"Abstraction layers" 将是框架的定义,无论好坏,所以你坚持使用它。
现在,由于您的背景水平较低,使用 .NET Web 服务的不那么侵入性的方法可能就是我之前建议的三个步骤。不过,您仍然坚持使用 IIS,以便处理通信(即管理 sockets/requests)。这就是框架的工作方式。
仍然有希望。如果您可以完全控制您的服务器(不是我的情况,其他一些 IT 团队管理 Web 服务器),您当然可以构建一个 windows 服务来监听一些套接字并相应地处理请求。如果你想为网页提供服务,这是一个最不常用的解决方案,但如果你只想通过 http 请求推送一些数据,它会工作得很好。如果你走这条路,我建议你看一下 System.Net 命名空间,你会在那里找到一些 类,比如 "Socket"。结合控制台应用程序或 windows 服务,您可以解决问题。
我的一个同事是前微控制器设计师,我很清楚你对.NET框架的感受。有时您会遇到一些挫折,但大多数时候都有工作安排。如果您需要更多详细信息,请随时索取。
首先以相反的顺序解决您的问题 - 为什么我需要 IIS?
答案是,也许你不知道。如果您正在做一个不会暴露于 public 互联网的简单监听器,那么您不需要它。
如果您正在开发一个需要扩展、健壮且易于管理的 Web 应用程序,那么它可以帮助您:
- 日志记录
- 在多服务器环境中运行 scale/high 可用性
- 以隔离方式处理多个请求
- 使用沙箱从同一主机提供多个应用程序,以确保每个应用程序都有保证的资源(内存,CPU)
- 应用程序生命周期管理
- IP 地址限制
- 支持 FTP、CGI、WebDAV
- URL重写
- 响应头操作
- 请求跟踪失败
- 防止某些 DoS 攻击,例如慢速 HTTP 攻击
- 等等
简而言之,它是一个具有工业实力的真实世界 Web 服务器,可以让您的应用程序在充满敌意的世界中可靠地运行,并随着您的应用程序的增长而扩展。如果您不需要这种 scale/high availability/management 功能,那么在某些情况下肯定是矫枉过正。在这些情况下,您可以选择在 Windows 服务甚至控制台应用程序中自行托管 ASP.Net。这听起来可能很复杂,但 OWIN - Open Web Interface for .Net 使它变得非常简单。这是 Asp.Net 用来与其托管服务器通信的接口的抽象。
这里有一个关于如何在控制台应用程序中自行托管 Web API 的非常好的教程
http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
它完全符合您在评论中的要求:
- 您创建了一个控制台应用程序项目
- 您添加对正确程序集的引用(本教程使用 NuGet 下载程序集包)
- 您编写您的网络操作逻辑
- 你编译
- 你运行生成的exe
- 就是这样!
关于你关于 ASP.Net 的第二点 - 它是一个经历了很多演变的框架,试图跟上 Web 开发世界中非常快速的变化。这意味着它变得有点臃肿并失去了一些连贯性,但最近开发人员一直专注于使其更轻量、更模块化和更简单。 Scott Guthrie 在他的博客中对此进行了总结:
我是 C#/.NET 的新手
- 为什么ASP.NET有这么多不同的项目可供选择? (Web 应用程序、Web API、网站、MVC 等)。我只想监听一个 tcp 端口,以及一种发送响应的方式。如果有库可以帮助我完成常规工作,例如构建 HTTP 请求、解析 header 等,那就太棒了。但我不想要一个试图在阳光下做任何事情的超级固执己见的框架。
- 为什么我需要 IIS?
Why does ASP.NET have so many different choices of projcets? (Web Application, Web API, Web Site, MVC ect). I just want to listen on a tcp port, and a way to send a response. etc...
因为每个项目都有自己的目的。 如果你想只是监听TCP端口那么你可以去学习微软的Katana OWIN(但我很怀疑这是否是你想要的) . Katana OWIN
简要介绍每个项目的目的:
- "Web Application" 实际上会打开另一个 window 并让您从以下选项中进行选择:
- Web API 用于公开 RESTful 服务或 JSON 数据。
- Web Forms 用于制作使用 Web Form 组件的网页。 (有点像Windows Forms,但是Web)
- MVC 用于制作模型-视图-控制器 Web 应用程序。这是您构建具有关注点分离的组件的地方。数据模型。查看用户看到的内容。用于控制页面行为方式的控制器。
Why do I need IIS at all?
IIS 用于服务 .NET 应用程序。 没有它,将很难为 .NET 应用程序提供服务。
我将从 2 开始,然后继续您的第一个问题。 IIS 将 运行 您需要的任何 .NET Web 服务,无论是庞大的 WCF 服务、ASP.NET 应用程序还是最基本的 http 处理程序。
据我所知,ISS 是使用 .NET Web 服务的最直接方式。如果你习惯了 PHP,它基本上是 LAMP 或 .NET 的 WAMP,这意味着它有点必要。正如 Mike Goodwin 指出的那样,还有其他选择,但我必须承认我对那些第三方不熟悉。由于用一层替换另一层意义不大,我会坚持 "normal" 程序。
由于您不希望框架为您执行大量操作,因此最好的选择可能是:
- 创建一个基本的 ASP.NET 项目
- 删除默认的 ASP.Net 页面,因为您似乎不需要它
- 向您的项目添加一个通用处理程序。这将产生一个 myFile.ashx,它处理 http 请求并让你构建任何你想要的响应
当然,如果您不想为 IIS 配置操心,您需要有人在 IIS 上设置 URL 并将其映射到您的处理程序存储库。
编辑: "Abstraction layers" 将是框架的定义,无论好坏,所以你坚持使用它。
现在,由于您的背景水平较低,使用 .NET Web 服务的不那么侵入性的方法可能就是我之前建议的三个步骤。不过,您仍然坚持使用 IIS,以便处理通信(即管理 sockets/requests)。这就是框架的工作方式。
仍然有希望。如果您可以完全控制您的服务器(不是我的情况,其他一些 IT 团队管理 Web 服务器),您当然可以构建一个 windows 服务来监听一些套接字并相应地处理请求。如果你想为网页提供服务,这是一个最不常用的解决方案,但如果你只想通过 http 请求推送一些数据,它会工作得很好。如果你走这条路,我建议你看一下 System.Net 命名空间,你会在那里找到一些 类,比如 "Socket"。结合控制台应用程序或 windows 服务,您可以解决问题。
我的一个同事是前微控制器设计师,我很清楚你对.NET框架的感受。有时您会遇到一些挫折,但大多数时候都有工作安排。如果您需要更多详细信息,请随时索取。
首先以相反的顺序解决您的问题 - 为什么我需要 IIS?
答案是,也许你不知道。如果您正在做一个不会暴露于 public 互联网的简单监听器,那么您不需要它。
如果您正在开发一个需要扩展、健壮且易于管理的 Web 应用程序,那么它可以帮助您:
- 日志记录
- 在多服务器环境中运行 scale/high 可用性
- 以隔离方式处理多个请求
- 使用沙箱从同一主机提供多个应用程序,以确保每个应用程序都有保证的资源(内存,CPU)
- 应用程序生命周期管理
- IP 地址限制
- 支持 FTP、CGI、WebDAV
- URL重写
- 响应头操作
- 请求跟踪失败
- 防止某些 DoS 攻击,例如慢速 HTTP 攻击
- 等等
简而言之,它是一个具有工业实力的真实世界 Web 服务器,可以让您的应用程序在充满敌意的世界中可靠地运行,并随着您的应用程序的增长而扩展。如果您不需要这种 scale/high availability/management 功能,那么在某些情况下肯定是矫枉过正。在这些情况下,您可以选择在 Windows 服务甚至控制台应用程序中自行托管 ASP.Net。这听起来可能很复杂,但 OWIN - Open Web Interface for .Net 使它变得非常简单。这是 Asp.Net 用来与其托管服务器通信的接口的抽象。
这里有一个关于如何在控制台应用程序中自行托管 Web API 的非常好的教程
http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
它完全符合您在评论中的要求:
- 您创建了一个控制台应用程序项目
- 您添加对正确程序集的引用(本教程使用 NuGet 下载程序集包)
- 您编写您的网络操作逻辑
- 你编译
- 你运行生成的exe
- 就是这样!
关于你关于 ASP.Net 的第二点 - 它是一个经历了很多演变的框架,试图跟上 Web 开发世界中非常快速的变化。这意味着它变得有点臃肿并失去了一些连贯性,但最近开发人员一直专注于使其更轻量、更模块化和更简单。 Scott Guthrie 在他的博客中对此进行了总结: