Skip to content

Files

Latest commit

60c9d10 · Jan 8, 2022

History

History
64 lines (41 loc) · 3.21 KB

File metadata and controls

64 lines (41 loc) · 3.21 KB

六、网络服务

简介

当然,Web 服务也能够处理多租户请求。在。NET 世界,实现 web 服务基本上有两个 API:Windows 通信基础 (WCF)和新的 Web API 。尽管它们有一些重叠的特性,但它们的架构和基本概念却大不相同。虽然对这些 API 的全面讨论超出了本书的范围,但让我们看看与多租户相关的一些要点。

周转框架

默认情况下,WCF 不使用 ASP.NET 管道,这意味着 HttpContext。当前不可用。这是为了让 WCF 有一个更精简、更集中的模型,在这个模型中,不需要经典的管道(但是可以启用它)。

如果我们不想使用 ASP.NET 管道,我们需要改变租户识别策略的实施。在 WCF 方法调用中,总是可以通过操作上下文访问当前请求上下文。当前网络运营上下文。当前(针对 REST web 服务)属性。因此,我们需要编写一个知道如何获取这些信息的租户识别策略的实现:

代码示例 67

          public class WcfHostHeaderTenantIdentification : ITenantIdentifierStrategy
         {
               public String GetCurrentTenant(RequestContext context)
               {
                     var request = WebOperationContext.Current.IncomingRequest;
                     var host = request.Headers["Host"];

                     return host.Split(':').First().ToLower();
               }
         }

另一方面,如果 ASP.NET 管道是一个选项,我们只需要通过 XML 配置启用它,通过aspnetcompatityenabled属性:

代码示例 68

          <system.serviceModel>
               <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
         </system.serviceModel>

或者,我们可以通过代码中的属性来启用它:

代码示例 69

          [AspNetCompatibilityRequirements(
                RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
          public class DateService : IDateService
         {
                //rest goes here
         }

| | 注:关于 ASP.NET 兼容模式的讨论,请查看这篇文章。 |

Web API

ASP.NET 网络应用编程接口是用。NET 框架。它紧密遵循 ASP.NET MVC 模型,因此基于控制器和动作。

目前,它可以托管在 IIS(传统方式)或 OWIN 支持的主机上。在第一种情况下,所有经典的 ASP.NET API(System.Web.DLL)都可用,包括 HttpContext。目前的,所以你可以使用相同的策略实现,为 MVC 和网络表单描述。对于 OWIN,请阅读第 8 章中的一些提示。

单元测试

只要 ASP.NET 经典 API 可用,我们就可以遵循第 5 章单元测试一节中描述的处方。对于 OWIN,跳到第八章。