2013-02-22 1 views
1

У меня есть проект облачного сервиса Windows Azure, содержащий несколько ролей в сети для размещения некоторых сервисов. Я хочу использовать ServiceX в ServiceY (каждое из которых работает на diffrent роли) с использованием относительного URL.Настроить конечную точку клиента WCF для использования относительного адреса (для Azure)

То, как я у себя 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"/> 
... 

Но как я могу использовать ServiceX в ServiceY с относительным адресом? Разве это невозможно, поскольку они работают на одном и том же облачном сервисе?

ответ

1

Вы можете использовать относительные адреса программно, но вам все равно нужно знать базовый адрес (или просто использовать локальный: 8080 в качестве основы) - это не представляется возможным использовать относительные адреса через web.config, если не создать собственную конфигурацию или плечо AppSettings.

// 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 для аналогичных средств.