我有一个带有一个 WebRole 和一个 WorkerRole 的 WCF 服务,用于与 Azure 数据库进行通信。此服务部署到 Windows Azure 云中。一切正常。
但是现在,我有一个(或多或少是学术性的)问题:是否可以将此服务部署到另一个托管商,而不是 Azure 云。如果是,则必须更改程序的哪些部分以及在其他托管环境中需要哪些软件(即 IIS)。
这个问题的背景是:我的客户想知道他是否独立于Azure Cloud。
非常感谢你的回答!
简单的答案
当您直接在 Visual Studio 中运行代码(即不在模拟器中)时会发生什么?
长答案
在 Azure 中创建角色时,Visual Studio 会向项目中添加一个继承 RoleEntryPoint 的类。此类包含 OnStart、OnStop 和 Run 的函数。
对于 WebRole,这个类不是必需的,事实上,创建的对象与您的 ASP.NET 应用程序位于一个单独的进程中。如果您在这里有任何代码,当您在本地(或其他云)上运行它时,您需要将它放在其他地方。也许是 Windows 服务,也许是 Global.asax?
至于 WorkerRole,它也有一个 RoleEntryPoint,但这是您的应用程序的主要入口点。在这种情况下,您可能可以在 Visual Studio 中创建一个新的 Windows 服务项目,并重新使用相同的逻辑。无论您在“运行”函数中添加了什么代码,您都可以只移动到一个共享 DLL,该 DLL 可以从 WorkerRole 或 Windows 服务访问。
至于其他 Azure 功能(blob、队列、表、SQL 数据库、访问控制服务、服务总线等),这些仍然可以从 Azure 外部使用,或者您可以为每个功能寻找替代方案。出于说明目的,您可以这样做:
队列 -> MSMQ
Blob -> 文件系统
SQL 数据库 -> SQL Server
如果您使用控制反转模式,您可以抽象出这些技术的实现,以使您的应用程序不知道正在使用哪种底层技术。这使得切换实现(和云供应商)变得非常容易。