将WCF客户端终结点配置为使用相对地址(对于Azure)

本文关键字:相对地址 对于 Azure 客户端 WCF 结点 配置 | 更新日期: 2023-09-27 18:00:39

我有一个Windows Azure云服务项目,该项目包含多个Web角色以托管一些服务。我想在ServiceY中使用ServiceX(每个都运行在不同的角色上),使用relativeURL。

这就是我托管ServiceX:的方式

<service name="ServiceX">
    <endpoint address="" binding="basicHttpBinding" contract="ServiceX" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

现在我想在ServiceY中使用该服务。有了一个绝对的URL,它工作得很好:

<system.serviceModel>
    <client>
      <endpoint name="ServiceXProxy"
          address="http://mycloudservice.cloudapp.net:8080/ServiceX.svc"
          binding="basicHttpBinding"
          contract="ServiceX"/>
...

但是,如何将ServiceY中的ServiceX与相对地址一起使用呢?这难道不可能,因为它们运行在同一个云服务上吗?

将WCF客户端终结点配置为使用相对地址(对于Azure)

您可以通过编程方式使用相对地址,但您仍然需要知道基地址(或仅使用localhost:8080作为基)-除非您构建自定义配置或利用AppSettings,否则无法通过web.config使用相对地址。

// create bindings & endpoints
var baseAddress = System.ConfigurationManager.AppSettings["baseAddress"];
var binding = new System.ServiceModel.BasicHttpBinding();
var endpoint = new EndpointAddress(baseAddress + "/ServiceX.svc");

您也可以从web.config加载客户端端点地址,并使用UriBuilder以类似方式覆盖基地址。