Вызовите ту же службу WCF с нескольких серверов, размещенных - PullRequest
2 голосов
/ 15 февраля 2011

Я немного поглощен тем, как выполнить эту задачу.Вопрос в том, как я могу вызвать службы WCF с нескольких хостингов.WCF одинаков для всех размещенных приложений.Тот же контракт, тот же тип привязки и т. Д. Я пытаюсь назвать его таким образом, потому что я буду размещать службы на нескольких серверах, и мне нужно, чтобы служба делала то же самое на всех них.Я должен позвонить с одного клиента.VS 2010, .Net Framework 4.0., C #.

Спасибо,

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Зависит от того, как вы планируете создавать прокси службы в клиентском приложении.Если вы хотите добавить ссылку на службу, достаточно добавить ее с одного сервера, а затем создать отдельную конфигурацию конечной точки для других серверов - все конфигурации конечных точек будут точно такими же, кроме адреса (вы можете сделать то же самое в коде).Когда вы вызываете службы, вы создаете экземпляр прокси-сервера для каждого сервера и передаете имя конечной точки (определенной в конфигурации) для каждого сервера, например:

 foreach(var endpointName in myStoredEndpointNames)
 {
   var proxy = new MyServiceProxy(endpointName);
   proxy.CallSomeOperation();
 }

Другой подход не предусматривает использование ссылки на службу добавления.В этом случае вы должны разделить контракты между сервером и клиентским приложением, и вы можете использовать ChannelFactory .Этот класс является фабрикой для клиентских прокси, которые создаются путем вызова CreateChannel.Вы можете передать имя конфигурации конечной точки, адрес конечной точки или привязку и адрес конечной точки при вызове этого метода.

1 голос
/ 16 февраля 2011

Я использую такую ​​функцию:

public static MyWcfClientType GetWcFClient(string hostName)
{
    MyWcfClientType client = new MyWcfClientType();

    // Build a new URI object using the given hostname
    UriBuilder uriBld = new UriBuilder(client.Endpoint.Address.Uri);
    uriBld.Host = hostName;

    // Set a new endpoint address into the client
    client.Endpoint.Address = new EndpointAddress(uriBld.ToString());
    return client;
}

Конечно, используйте свой собственный тип для "MyWcfClientType"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...