本章将引导您完成开发和测试环境的设置。
为了能够遵循这里描述的概念和代码,您将需要一个 Visual Studio 的工作安装;2012 年以上的任何版本都可以,包括闪亮的全新社区版。我自己也用过 Visual Studio 2013,但是你可以自由使用不同的版本;基本上,您需要一个可以处理的 Visual Studio 版本。NET 4.x 和 NuGet 包。
NuGet 是 Visual Studio 的原生打包系统。大多数软件公司,包括微软,以及独立开发者和社区(如 NHibernate 社区)通过 NuGet 提供他们的库和框架。这是获取软件包及其依赖项的简单方法。
出于本书示例的目的,您将需要以下软件包:
OWIN 自主机
OWIN Web API
实体框架代码优先
无遮蔽
团结
ASP.NET MVC 统一引导程序
企业库日志应用程序块
ASP.NET 身份(实体框架)
ASP.NET 身份(NHibernate)
OWIN 身份
AspNet。身份.实体框架.多租户
瓦
如果你想遵循本书中描述的例子,你需要为你的开发机器设置不同的主机名。这样我们就可以利用第 3 章中描述的主机头租户识别模式。如果您对服务于您的本地连接(工作或家庭)的 DNS 服务器具有管理访问权限,您可以向静态 IP 地址添加不同的别名,然后使用该 IP 地址,而不是使用 DHCP 分配的地址。
另一种选择是使用免费服务,如 xip.io ,将域名 xip.io 中的主机名翻译成 ip 地址;例如 127.0.0.1.xip.io 会自动翻译成 127.0.0.1 、 192.168.1.1.xip.io 变成 192.168.1.1 等等。这是因为我们可以使用基于前面提到的主机头来识别租户的策略,但是它只适用于 IP 地址,而不适用于主机名。
另一种选择是通过**% WINDIR % \ System32 \ Drivers \ Etc \ hosts**文件配置静态 IP-名称映射。该文件包含以下格式的行:
代码示例 1
<IP address> <host name> <alias 1> … <alias n>
例如,您可以添加以下条目:
代码示例 2
127.0.0.1 localhost abc.com xyz.net
这将告诉 Windows 上的 IP 堆栈,名为abc.com和xyz.net的主机都将转换为回送地址 127.0.0.1 ,而不需要进行 DNS 查找。
在互联网信息服务 (IIS)中设置多租户网站很简单:只需打开 IIS 管理器小程序,选择网站 > 添加网站。然后添加您希望处理的主机名:
图 2:在 IIS 中设置多租户站点
现在为所有其他租户添加一个主机名,选择站点,点击绑定。
图 3:向站点添加其他主机名
图 4:所有站点的主机名
同样重要的是应用程序池:您可以让不同的应用程序池为每个不同的租户服务(站点绑定)。这提供了更好的隔离,也就是说,如果其中一个租户出现问题(可能是未处理的异常导致站点不可用),它不会影响其他租户。此外,您可以让应用程序池以不同的身份运行,如果您希望访问不同的数据库或具有不同的访问级别,这很好。只需在 IIS 管理器中创建任意多的应用程序池:
图 5:为租户创建应用程序池
如果您将使用 IIS Express ,除了 DNS 或主机文件,您还需要配置网站的绑定以允许其他主机名。不幸的是,您将不得不手动完成,因为 IIS Express 不提供任何图形工具;该网站的配置文件位于:% HOMEPATH % \ Documents \ IIS express \ Config \ application host . Config。打开它并找到要更改的网站条目;应该如下所示(减去name
、id
、physicalPath
和bindingInformation
):
代码示例 3
<sites>
<site name="Multitenant" id="1">
<application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/"
physicalPath="C:\InetPub\Multitenant" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:localhost" />
</bindings>
</site>
</sites>
您可能会看到一些已经配置的站点。在这种情况下,您必须找到您感兴趣的元素,可能通过physicalPath
属性,并添加一个带有指向正确主机名和端口的bindingInformation
属性的binding
元素。
代码示例 4
<bindings>
<binding protocol="http" bindingInformation="*:80:localhost" />
<binding protocol="http" bindingInformation="*:80:abc.com" />
<binding protocol="http" bindingInformation="*:80:xyz.net" />
</bindings>
这指示 IIS Express 也接受对主机abc.com和xyz.net以及本地主机的请求。