2009-05-22 4 views
0

У меня есть веб-приложение, которое предоставляет веб-службы с использованием WCF и wsHttpBindings. Возможно иметь приложение на разных машинах и разных URL-адресах. Это будет означать, что местоположение службы WCF будет отличаться для каждого.Определить wsHttpBinding во время выполнения с WCF

Я создаю службу Windows, которая будет ссылаться на каждое приложение и выполнять задачу. Каждая задача должна вызвать услугу в веб-приложении. Я понимаю, что привязки все настроены в app.config, но есть ли более простой способ вызвать службу динамически или как я буду структурировать app.config?

<webApplication WebServiceUrl="http://location1.com/LunarChartRestService.svc" /> 
<webApplication WebServiceUrl="http://location2.com/LunarChartRestService.svc"/> 

ответ

1

конфигурационный файл вашего клиента может выглядеть примерно так:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <client> 
     <endpoint name="Endpoint1" 
       address="http://location1.com/LunarChartRestService.svc" 
       binding="wsHttpBinding" 
       contract="(whatever-your-contract-is)" /> 
     <endpoint name="Endpoint2" 
       address="http://location2.com/LunarChartRestService.svc" 
       binding="wsHttpBinding" 
       contract="(whatever-your-contract-is)" /> 
     <endpoint name="Endpoint3" 
       address="http://location3.com/LunarChartRestService.svc" 
       binding="wsHttpBinding" 
       contract="(whatever-your-contract-is)" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

Затем в коде, вы можете создать такой конечной точки (прокси-клиент), основанный на его имени и, таким образом, вы можете выбрать в зависимости от того место вам нужно. Ничто не мешает вам создавать несколько клиентских прокси! Таким образом, вы можете подключиться к нескольким конечным точкам сервера, используя несколько клиентских прокси, без проблем.

В качестве альтернативы вы также можете создать экземпляр «WsHttpBinding» и «EndpointAddress» в коде и установить необходимые свойства (если есть), а затем вызвать конструктор для прокси-сервера клиента с этими готовыми объектами, Таким образом, перекрывая весь app.config цирк и создавая то, что вы чувствуете, необходимо:

EndpointAddress epa = 
    new EndpointAddress(new Uri("http://location1.com/LunarChartRestService.svc")); 
WSHttpBinding binding = new WSHttpBinding(); 

Марк

+0

У меня возникли проблемы с поиском примеров создания ClientProxy, точки, в которой выполняется вызов чтобы вернуть результаты. – mickyjtwin

+0

Если у вас есть ваш сервис и работа, вы можете либо создать Visual Studio своего клиента (щелкнув правой кнопкой мыши по вашему проекту и выбрав «Добавить ссылку на службу»), либо вы можете использовать служебную программу командной строки «svcutil» для делать то же самое. Это создаст прокси-сервер на стороне клиента, который будет иметь необходимые конструкторы. –

+0

Но если я добавлю ссылку на службу, которая является конкретной для конечной точки, правильно? Мне это нужно, так что конечная точка настраивается. – mickyjtwin

0

Из вашего описания звучит так, как будто все серверы подвергаются одному и тому же контракту на обслуживание. Если это так, вы можете очень просто объявить несколько endpoints в своем web.config и выбрать один во время выполнения на основе имени конечной точки.

Конечно, возможно, вы предпочитаете не иметь дело с этой частью конфигурации WCF и скорее просто иметь более простой список URL-адресов и быть с ними связанными. Это вполне возможно; вам просто нужно немного поработать над кодовой частью для создания экземпляров клиентских сторон/объектов канала.

+0

вы знаете о каких-либо примеров делать это «простой путь», и доступа к/с использованием нескольких конечных точек в во время выполнения? – mickyjtwin

+0

настройка сервиса в веб-приложении также wshttp, а не базовая. – mickyjtwin

+0

Существует несколько способов: это просто один из них: http://msdn.microsoft.com/en-us/library/ms734681.aspx – tomasr