2009-11-13 145 views
2

我正在開發一個應用程序,我需要爲它提供一個Web界面。我正在考慮使用WCF爲Web界面提供服務,並使用我的應用程序(無IIS)自行託管。現在,如果這兩個不使用相同的端口,瀏覽器會抱怨XSS ...在同一端口自託管WCF與自託管Web服務器(HTTPListener)。可能?

這可能嗎?這是一個好主意嗎?

編輯 經過一番調查後,我設法使其工作。

這裏的web服務的自我主機代碼:

var serviceHost = new ServiceHost(typeof(CalculatorService)); 
serviceHost.AddServiceEndpoint(typeof (ICalculator), new WSHttpBinding(), "http://localhost:8000/webservice"); 
serviceHost.Open(); 

Console.WriteLine("CalcService is running."); 
Console.WriteLine("Press Enter to terminate the service."); 
Console.ReadLine(); 
serviceHost.Close(); 

而這裏的虛擬主機代碼:

var listener = new HttpListener(); 
listener.Prefixes.Add("http://localhost:8000/webconsole/"); 
listener.Start(); 
Console.WriteLine("listening"); 
while(true) 
{ 
    HttpListenerContext context = listener.GetContext(); 
    /* ... */ 
} 

爲WebService的工作,我需要做this

回答

3

沒問題。 HTTP.SYS抽象了WCF使用的HTTP內容,只要它們使用不同的路徑前綴,它就允許任意數量的進程共享相同的端口。我出於完全相同的原因始終這樣做。

這不適用於IIS 5.1或VS網絡服務器上的XP,不過 - 以防萬一你要試試。他們不是基於HTTP.SYS的,所以他們希望獨佔端口。其他任何東西(包括帶有2個WCF主機的XP),你都很好。

+0

你有這樣的例子嗎?我嘗試了一些,但沒有奏效。無論從第二個(WCF或網絡服務器)開始抱怨... – subb 2009-11-14 23:16:13

+0

你使用什麼網絡服務器?它必須基於HTTP.SYS(IIS6 +或HttpListener等),並且您的服務必須配置爲IIS尚未獲取的URI路徑(即,您無法在/上收聽,必須be/Services/Foo或其他)。 – nitzmahone 2009-11-15 00:13:40

+0

得到它的工作。我會將代碼添加到主帖子中。 – subb 2009-11-15 18:34:12

-1

聽起來很花哨,我得看這個。如果沒有其他的工作,你可以保持它作爲兩個獨立的端口,但可能使用反向代理來整理WCF端點?