2010-10-14 2 views
0

У меня есть служба и она размещается в приложении Windows. В приложении, служба запускается, как показано нижеНесколько экземпляров автономной службы WCF

public void Initialise() 
{ 
    BasicHttpBinding binding = new BasicHttpBinding(); 

    ServiceHost host = new ServiceHost(typeof(SampleType)); 
    host.AddServiceEndpoint(typeof(ISampleService), binding, "http://localhost:6732/Sample/Service/"); 

    host.Open(); 
} 

Теперь, если я запускать несколько экземпляров приложения, я получаю ошибку

HTTP не удалось зарегистрировать URL http://localhost:6732/Sample/Service/. Другое приложение уже имеет , зарегистрировав этот URL-адрес с помощью HTTP.SYS.

Есть ли способ, которым несколько экземпляров могут прослушивать один и тот же URL-адрес?

+0

Большой вопрос: ** ПОЧЕМУ ** Даже с помощью одного ServiceHost вы можете легко обслуживать несколько запросов одновременно. Почему вы хотите запускать несколько экземпляров? –

+0

@marc_s - он может попробовать протестировать несколько экземпляров клиента/сервера на одном компьютере. – kyndigs

+0

У меня есть другое приложение, и из этого приложения я должен иметь возможность отправлять сообщения во весь экземпляр приложения, размещенного в сервисе. Я знаю, что есть другие возможности для связи между процессом, но поиск решения с использованием WCF – zsquare

ответ

0

Вам нужно запустить его на другом порту, попробуйте рандомизировать номер порта и проверить, используется ли порт первым до запуска службы.

Вы можете запускать только один экземпляр на одном порту, поэтому решение состоит в том, чтобы изменить порт для каждого экземпляра, как вы это делаете, зависит от вас.

6732 - это порт, поэтому, возможно, приращение на каждом экземпляре или рандомизация.

http://localhost:6732/Sample/Service/

Также проверьте эти два S0 сообщения, которые могут помочь:

WCF: Net.TCP multiple bindings, same port, different IP Addresses

Can 2 WCF service processes listen the same port?

+0

В этом случае общие адреса конечных точек по-прежнему должны быть уникальными. В моем случае я хочу использовать тот же адрес и при запросе службы, мне нравится получать этот запрос во всех экземплярах хоста службы – zsquare

0

Вы не сможете создать несколько экземпляров службы, которые все получают данные, отправленные к определенному адресу/порту, Windows должна направлять входящий сетевой трафик на определенный сокет, прослушивающий этот порт.

Я подозреваю, что то, что вы пытаетесь сделать, достигается наилучшим образом благодаря использованию дуплексного связывания, такого как netTcpBinding. В этом случае ваши многочисленные клиенты будут подключаться к серверу, отправляя сообщение, а затем дождаться обратного вызова с этого сервера.

Смежные вопросы