【问题标题】:What are the limitations , if any , when hosting a WCF service on azure在 azure 上托管 WCF 服务时有哪些限制(如果有)
【发布时间】:2026-01-17 18:55:01
【问题描述】:

我编写了一个 WCF 服务,我想在 azure 中托管它。当我编写服务时,我并没有想到要在 azure 中托管它。

每个应用程序,甚至是 WCF 服务,都在使用平台资源。当我说 resource 时,我的意思是什么:

  1. 内存
  2. CPU
  3. 文件句柄
  4. 低级 API(pinvoke)
  5. Com 对象。
  6. 套接字
  7. .Net BCL API(是的,我什至认为这是一种资源)
  8. 数据库
  9. etc..etc..(任何不是我自己编写的代码)

假设示例:例如,如果服务记录到驱动器“H”,它可能在我的计算机上运行(因为我有驱动器“H”),但它可能无法在云上运行。 Drive 'C' 或任何驱动器号相同,我什至不知道从服务角度如何看待文件系统。 这只是一个例子。

另一个假设的例子:我可以从服务中调用 nt.dll 中的一些 winapi 方法,它可以在我的计算机上运行。但我想它不会在云上工作。

我的问题是: 如何知道云上可以使用哪些资源,写入云时资源是如何使用的?应该遵守哪些“规则”?还有有没有“智能”编译器可以保证我的服务兼容云平台

我很高兴获得有关此主题的任何详细说明或参考\书籍。我试图通过谷歌搜索找到一些信息,但没有找到足够好的信息。

一旦我得到详细信息,我就可以对我的服务进行必要的移植(如果需要的话)。

【问题讨论】:

    标签: c# .net wcf azure cloud


    【解决方案1】:

    这些限制取决于您托管 WCF 服务的方式:

    1. Windows Azure 网站:这是一种共享托管模型。如果您在网站中部署 WCF 服务,则需要考虑到这一点。这意味着您对磁盘的访问受限、对低级 API 的访问受限、无法使用本机库……
    2. Windows Azure Web / Worker Roles (PAAS):您的应用程序将部署在 Windows Server 2008 / 2012 VM 中。因此,如果您愿意,您可以利用在普通虚拟机上使用的所有功能(您在问题中提到的所有“资源”)。唯一要记住的是,这些虚拟机是非持久的(这意味着您存储在它们上的所有数据都可能丢失)并且负载均衡器不是粘性的(如果您使用 WCF 会话可能是一个问题)。这些机器不是持久的这一事实也意味着您无法以可靠的方式在它们上安装数据库服务器,但您可以使用外部数据库,如 SQL Azure。此解决方案的优点是机器由 Fabric Controller 维护,因此您将服务包(应用程序)推送到 Windows Azure,其余的部署工作由您完成。
    3. Windows Azure 虚拟机 (IAAS):您将获得一台类似于 Web / Worker Roles 的机器,它允许您使用所有“资源”,但具有更多控制权。这些机器是持久的,这意味着您存储在它们上的所有内容都保留在 Blob 存储中(如果机器崩溃,您不会丢失存储在 OS 驱动器和数据磁盘上的数据)。这是最接近本地部署的替代方案,但这也增加了额外的工作。管理所有服务器上的部署、处理安全更新……但在这种情况下,您可以在机器上安装自己的数据库。请记住,这里的负载均衡器也不是粘性的,这可能会影响 WCF 会话等功能。

    【讨论】:

    • 我想我可以通过编写自己的会话机制并将其持久化到 Azure SQL DB 中来克服粘滞会话问题,对吧?
    • 是的,通过 ASP.NET,您可以使用通用提供程序来执行此操作。
    【解决方案2】:

    您可以按照下面提到的在 Windows Azure 中使用 WCF 的指南进行操作。

    1. 决定是否以 Web 或辅助角色运行 WCF 服务

      WCF 服务可以托管在 Web 角色或辅助角色中。您决定使用哪种类型的角色取决于您正在编写的 WCF 服务的类型

    2. 以 Web 角色运行 WCF 服务

      为部署到 Windows Azure Web 角色而设置的 WCF 服务使用与本地服务器上 IIS 中托管的 WCF 服务相同的设置和配置。

    3. 了解 Windows Azure 中的 WCF 安全性

      在 Windows Azure 上托管 WCF 服务的安全问题与在本地服务器中托管服务时遇到的安全问题相同

    4. Windows Azure 中的 WCF 疑难解答

      您可以使用与托管在本地服务器上的 WCF 服务相同的技术来解决 Windows Azure 中 WCF 服务的性能问题

    更多信息请查看Guidance for Using WCF in Windows Azure Here

    希望对你有帮助。

    【讨论】:

      最近更新 更多