【问题标题】:Configuring Associated WCF Web Role IP on Azure在 Azure 上配置关联的 WCF Web 角色 IP
【发布时间】:2013-07-30 23:48:32
【问题描述】:

我有一个 Azure 项目,其中包含一个 WCF 服务 Web 角色和一个 ASP.NET 表单 Web 角色,我使用每个角色的 2 个实例。 ASP.NET Forms Web 角色将通过标准服务引用通过 Web.config 中配置的 tcp 绑定定期调用 WCF 服务 Web 角色。

<endpoint address="net.tcp://localhost:666/EventService.svc"
    behaviorConfiguration="DefaultBehaviour" binding="netTcpBinding"
    bindingConfiguration="TCPBinding" contract="EventService.IEventService"
    name="EventService" />

我遇到的问题是,目前我无法部署这些角色,除非在每次部署后手动编辑 web.config 文件(因为部署这些角色的 IP 端点地址可能会更改)。

我考虑解决此问题的方法是拦截WebRole.OnStart() 事件并使用RoleEnvironment.Roles["MyWCFServices"].Instances,然后直接通过Microsoft.Web.Administration.ServerManager 修改Web.config 文件以引用正确的WCF 服务IP。

但是在我走这条路之前,有人可以确认没有更简单的方法来完成 Azure 平台中的 Web 角色之间的 IP 引用吗?

【问题讨论】:

    标签: c# asp.net .net azure azure-web-roles


    【解决方案1】:

    由于 WCF 和 ASP.Net 的 web 角色不同,它们的 url 只会因端口号而异,为什么要绑定到 IP 地址?

    对于此类变体,您可以使用 web.config transformation 并通过创建诸如 web.cloud.config 之类的部署配置来定义用于生产部署的 web.config 条目。

    更新:如果端点是内部的,则上述模型不适用。 IP 是随机生成的,必须在运行时绑定。看到这个post

    【讨论】:

    • 感谢您的回答,但不幸的是这不正确。 WCF 服务 Web 角色和 ASP.NET 表单 Web 角色在默认部署下具有不同的 IP 地址。 (虽然这可能是我所做的事情的结果)
    • 你使用的不是IP地址,而是诸如myservice.cloudapp.net:8080/wcfservice.svc之类的名称
    • 好吧,我觉得自己像个白痴。我从没想过这会起作用,因为我只公开了一个私有端点,我只是假设它不能通过公共“域”获得。谈论过度复杂的情况。非常感谢...
    • 因此,经过进一步测试,该解决方案实际上不起作用,正如之前所认为的,除非端点是公共的(在我的情况下不是一个选项),使用云服务域名无法解析到 WCF端点为私有地址时的服务。
    • 你是对的,内部端点不会暴露在外部,而是在运行时分配 ip+port。所以你需要在运行时进行发现和绑定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多