我需要在防火牆中添加一條規則,以便自我託管的http Web服務可以接收請求,但是無論何時添加指定執行託管的程序或服務的規則,客戶端請求都會被阻止。爲什麼WCF服務監聽爲PID 4(SYSTEM)而不是作爲託管它的進程的PID?
Netstat顯示在該端口偵聽的PID是4(系統)。我不想打開整個端口來打電話給SYSTEM,我想限制打電話給正在執行託管的特定程序/服務。任何人都可以提供一些關於我如何完成此任務的見解?
netstat -ano
TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING 4
TCP [::]:1234 [::]:0 LISTENING 4
這裏是一個準系統例如(實際託管庫是asp.net mvc4網頁API,但我發現,它也與原來的WCF的Web API和只是普通的WCF服務真)。我試圖在自己的線程上打開服務主機,但沒有任何影響。奇怪的是,當我寫的PID到控制檯它是節目PID但netstat的還是報告說,它正在監聽的PID 4.
class Host
{
private static HelloWorldService service;
static void Main()
{
Thread HostingThread = new Thread(OpenHostingThread);
HostingThread.Start();
Console.WriteLine("Server Running...");
Console.ReadLine();
}
static void OpenHostingThread()
{
service = new HelloWorldService();
HttpServiceHost host = new HttpServiceHost(service, "http://localhost:1234");
host.Open();
Console.WriteLine(Process.GetCurrentProcess().Id);
}
}
它不是用戶,它運行在那是問題。問題在於它正在傾聽的過程。在這種情況下,SYSTEM是一個PID爲4的進程。我需要它來監聽正在進行實際託管的進程,以便鎖定對特定程序的請求。我已經看到服務使用他們自己的程序PID進行監聽,所以我知道這是可能的,但我不確定在何處或在什麼級別配置。 – Despertar 2012-03-27 19:23:06
使用HTTP/HTTPS,所有監聽通常由系統級sttp.sys完成。請參閱http://stackoverflow.com/questions/1473248/does-all-http-trafic-go-through-http-sys-on-windows – Maurice 2012-03-27 19:39:05
感謝您的鏈接,這很有幫助。如果我使用net.tcp:// localhost:1234這樣的地址,那麼PID就是宿主程序的PID,但正如鏈接所說,http必須作爲系統運行,除非你編寫自己的http處理程序,因爲安全原因。 – Despertar 2012-03-28 23:25:12