在Azure上托管WCF服务时有什么限制(如果有的话)

时间:2012-12-28 10:06:42

标签: c# .net wcf azure cloud

我写了一个WCF服务,我想在azure中托管它。当我写这个服务时,我并没有想到我将在azure中主持它。

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

  1. 存储器
  2. CPU
  3. 文件句柄
  4. 低级API(pinvoke)
  5. Com objects。
  6. 插座
  7. .Net BCL API(是的,我甚至认为这是一种资源)
  8. 数据库
  9. etc..etc ..(任何不是我自己编写的代码)
  10. 假设示例:例如,如果服务记录到Drive'H',它可能在我的计算机上运行(因为我有驱动器'H'),但它可能无法在云上运行。对于Drive'C'或任何驱动器号,我甚至不知道如何从服务角度看文件系统。 这只是一个例子。

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

    我的问题是: 我如何知道可以在云上使用哪种资源以及在写入云时如何使用资源?要遵循的“规则”是什么?是否有任何“智能”编译器可以确保我的服务与云平台兼容

    我很乐意获得有关此主题的任何详细解释或参考书。我试图通过谷歌搜索找到一些信息,但没有发现任何足够好的内容。

    一旦我得到详细信息,我就可以将nessecary移植到我的服务中(如果有需要的话)。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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服务的性能问题

  5. 要获取更多信息,请查看Guidance for Using WCF in Windows Azure Here

    我希望这会对你有所帮助。