MicroService4Net - 使用 C# 轻松创建微服务
创建一个简单的自托管 Web API 服务,只需 2 分钟即可作为控制台和服务的形式运行
引言
“微服务”是一种软件架构设计模式,其中复杂的应用程序由小型、独立的进程组成,这些进程使用与语言无关的API相互通信。这些服务规模小、高度解耦,并且专注于执行一项小型任务。
来自维基百科 (http://en.wikipedia.org/wiki/Microservices)
背景
在过去的几年里,微服务已成为许多复杂系统中常见的软件架构。
在本技巧中,我想介绍一个我编写的库 (MicroService4Net
),它使C#程序员能够非常轻松地创建此类服务。
因此,如果您按照我的说明操作,您将获得一个HTTP服务器,它可以响应HTTP请求并返回JSON响应(非常粗略地说)。
您可以将其作为Windows服务或控制台应用程序运行(打开新项目时,您无需只选择其中一种)。
并且您不需要IIS(所有内容都是自托管的)。
Using the Code
您可以从此处下载源代码 这里。
打开一个新的Visual Studio控制台应用程序,并向其中添加MicroService4Net
NuGet包。
注意使用最高依赖性行为。
安装依赖项
在Program.cs文件中,添加此using
语句
using MicroService4Net;
在Main
函数中编写以下代码
static void Main(string[] args)
{
var microService = new MicroService();
microService.Run(args);
}
添加一个新类,用于您的控制器(例如ExampleController
)
using System.Web.Http;
public class ExampleController : ApiController
{
[Route("Example")]
public string GetExample()
{
return "Example";
}
}
现在,您可以将其作为控制台应用程序运行
打开网络浏览器并浏览到 https://:8080/Example
默认端口为8080。但是,如果您想更改端口,只需在Main
函数中执行以下操作
static void Main(string[] args)
{
var microService = new MicroService(1234);
microService.Run(args);
}
现在,它将在1234
端口上运行。
请注意,如果要使其在80端口上运行,则应以管理员身份运行程序。
现在,您可以使用它编写任何您想要的服务,如果您熟悉Web API控制器,它与Web API控制器完全相同。创建新服务所需的时间非常短,因此您可以专注于您的实际逻辑。
到目前为止,我们将其作为控制台应用程序运行,但是如果您想将其作为Windows服务运行,这也是可能的!
您需要添加另外两个空类(没有它们,Windows服务将无法工作!)
using MicroService4Net.ServiceInternals;
public class MicroServiceInstaller : ProjectInstaller { }
public class MicroServiceService : InternalService { }
并向项目添加两个引用
System.Configuration.Install
System.ServiceProcess
就是这样,现在您可以将服务安装为Windows服务
以管理员身份运行cmd(为了安装Windows服务,您必须是管理员),转到找到已编译代码的文件夹并编写(如果您的EXE名为MyMicroService
)
MyMicroService.exe -install
现在您有一个Windows服务正在运行,它将在每次系统启动时自动启动。
您可以使用浏览器检查它
如果你想卸载服务,你只需要执行以下操作
MyMicroService.exe -uninstall
您甚至不需要停止Windows服务。
当然,如果您只想将其作为控制台运行
MyMicroService.exe
更新
MicroService4Net 的 2.0 版本已发布。此版本使用 Owin 代替 ASP.NET Web Api 自托管,正如 codefabricator 建议的那样。API 没有更改。
现在默认启用 CORS。如果您不想启用它,您可以通过这种方式创建 MicroService
var microService = new MicroService(useCors: false);
下一步?
我的代码实际上是开源的,可以在“有用链接”部分找到。
如果您需要一些关于代码的解释,我很乐意撰写另一篇文章进行解释。
欢迎提出任何建议或你发现的问题。