gpt4 book ai didi

c# - Azure:使用 Full-IIS 进行 Web 角色内通信 (netTcpBinding)

转载 作者:太空狗 更新时间:2023-10-29 23:48:10 25 4
gpt4 key购买 nike

我需要在 Windows Azure 项目中即时更改一些配置设置 - 并且需要通过 Web 服务调用来更改它们(通过平台 api 或 Azure 管理站点更新应用程序的配置是不可行的)此处有一个选项)。

该项目具有多个 Web 和辅助角色 - 所有这些角色都需要在新配置发生更改时了解它。

配置会持久保存到持久存储中,并且还会在运行时缓存在静态变量中。

我的解决方案是在我的角色上创建一个内部 (tcp) 端点,并使用它循环遍历这些角色中的所有角色和实例,动态创建客户端,并告诉实例有关新设置的信息。 (与: http://msdn.microsoft.com/en-us/gg457891 几乎相同)

起初,我在 WebRole 的 RoleEntryPoint 中启动了一个 ServiceHost...我很困惑,为什么当我逐步完成通信(静态变量设置正确)时,一切似乎都工作正常 - 然而当我制作其他webservice 调用时,静态变量似乎“忘记”了我设置的内容。

本地和 Azure 临时环境都是这种情况。

此时我意识到,因为我们使用的是完整 IIS 模式,所以 RoleEntryPoint 和 Web 服务在两个单独的进程中运行 - 一个在 Azure 的 stub 中,另一个在 IIS 中。

“没问题”我说,我只需将启动 ServiceHost 的代码行从 RoleEntryPoint 移动到 global.asax 中 - 此时 ServiceHost 将在与其余部分相同的进程中启动站点 - 和静态变量将是相同的。

这就是我遇到问题的地方;这在我的开发环境中运行的本地计算机上非常有效。一旦我部署到登台,我就开始收到错误电子邮件,指出用于连接到服务的 channel 无法关闭,因为它处于“故障状态”。

问题:

  • 导致此问题的 Azure 与开发环境有何不同?
  • 如何解决或解决该问题?
  • 有没有人对我应该如何获取更具描述性的错误有任何一般建议...我是否必须在 Azure 中启用完整的 wcf 诊断才能获得此错误,或者是否有其他方法可以获取异常详细信息?

后续:

通过远程桌面我学到了一些有趣的事情:

  • 默认情况下,Azure WebRoles 上不安装非 HTTP 激活。我相信这可以通过启动脚本来克服:

    开始/w pkgmgr/iu:WCF-NonHTTP-Activation;

  • Web 角色在 IIS 中创建的网站默认未启用 net.tcp 协议(protocol)。我也相信这可以通过启动脚本来克服:

    %systemroot%\system32\inetsrv\appcmd.exe 在此处设置应用程序“网站名称”/enabledProtocols:https,http,net.tcp

我没有时间完全接受这一切,因为截止日期迫使我暂时实现一些解决方法。

与此主题相关的一些有用链接:

http://msdn.microsoft.com/en-us/magazine/cc163357.aspx

http://forums.iis.net/t/1160443.aspx

http://msdn.microsoft.com/en-us/library/ms731053.aspx

http://labs.episerver.com/en/Blogs/Paul-Smith/Dates/2008/6/Hosting-non-HTTP-based-WCF-applications-in-IIS7/

最佳答案

更新(2011 年 6 月 27 日):

令人惊讶的是,微软的某人(我评论了他的博客)实际上给了我这个问题的答案。

Azure 和 WCF 团队更新了这篇文章:

http://blogs.msdn.com/b/windowsazure/archive/2011/06/27/hosting-services-with-was-and-iis-on-windows-azure.aspx

该链接包含您进行此操作所需的所有信息。

非常感谢 MSFT PM Yavor Georgiev 获胜。

<小时/>

自从我问这个问题以来已经有一段时间了,但没有答案,所以让我留下这个:

根据我在帖子中的后续内容,有很多方法可以实现这项工作......但它们很复杂且难以实现。

对于 worker 角色,netTcpBinding 工作得很好。这里没有问题。继续使用它吧。

对于 WEB 角色,您会遇到问题。但是 netTcpBinding 是您需要用来公开内部端点的。该怎么办?

好吧,这就是我所做的:

  • 使用 ServiceHost 在 RoleEntryPoint 中启动 netTcpBinding 服务。
  • 使用 SOAP/JSON/任何您想要的方式在您的网络角色中创建标准 WCF 服务。
  • 当您通过 netTcpBinding 接收请求时,将它们代理到环回适配器上的 WCF 服务。
  • 使用 SSL 客户端证书正确保护您的“内部”WCF 服务。

它并不完美......但它有效,而且并不糟糕。

我怀疑需要做这种事情并不常见,而且我真的想不出除了在运行时动态修改设置之外您还需要这样做的任何原因......这意味着您'不要疯狂地抨击这些服务。

显然,YMMV。

关于c# - Azure:使用 Full-IIS 进行 Web 角色内通信 (netTcpBinding),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com