ASP.NET 和 IIS 需要什么?

What do I need out of ASP.NET and IIS?

我是 C#/.NET 的新手

  1. 为什么ASP.NET有这么多不同的项目可供选择? (Web 应用程序、Web API、网站、MVC 等)。我只想监听一个 tcp 端口,以及一种发送响应的方式。如果有库可以帮助我完成常规工作,例如构建 HTTP 请求、解析 header 等,那就太棒了。但我不想要一个试图在阳光下做任何事情的超级固执己见的框架。
  2. 为什么我需要 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

简要介绍每个项目的目的:

  1. "Web Application" 实际上会打开另一个 window 并让您从以下选项中进行选择:
  2. Web API 用于公开 RESTful 服务或 JSON 数据。
  3. Web Forms 用于制作使用 Web Form 组件的网页。 (有点像Windows Forms,但是Web)
  4. 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" 程序。

由于您不希望框架为您执行大量操作,因此最好的选择可能是:

  1. 创建一个基本的 ASP.NET 项目
  2. 删除默认的 ASP.Net 页面,因为您似乎不需要它
  3. 向您的项目添加一个通用处理程序。这将产生一个 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 在他的博客中对此进行了总结:

http://weblogs.asp.net/scottgu/introducing-asp-net-5