2009-11-13 116 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端点?