2010-10-14 28 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不能註冊網址 http://localhost:6732/Sample/Service/。 另一個應用程序已經在 上用HTTP.SYS註冊了這個URL。

有沒有什麼辦法可以讓多個實例監聽同一個URL?

+0

最大的問題是:**爲什麼?? **即使使用單一的ServiceHost,您也可以輕鬆地同時處理多個請求。你爲什麼要運行多個實例? – 2010-10-14 11:58:55

+0

@marc_s - 他可能希望在同一臺機器上測試客戶機/服務器的多個實例。 – kyndigs 2010-10-14 12:01:13

+0

我有另一個應用程序,從這個應用程序我應該能夠發送消息到服務託管應用程序的所有實例。我知道還有其他的選項可用於流程之間的通信,但使用WCF – zsquare 2010-10-15 03:55:03

回答

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 2010-10-15 04:00:44

0

您將不能創建所有接收發送數據的服務的多個實例到特定的地址/端口,Windows必須將傳入的網絡流量導向偵聽該端口的特定套接字。

我懷疑你正在嘗試做什麼最好通過使用雙工綁定,如netTcpBinding實現。在這種情況下,您的多個客戶端都將連接到發送該消息的服務器,然後等待該服務器的回調。