比较自托管:WCF与HttpListener

比较自托管:WCF与HttpListener,wcf,asp.net-web-api,signalr,httplistener,Wcf,Asp.net Web Api,Signalr,Httplistener,我一直在研究在自托管应用程序中使用ASP.NET Web API和Signal的可能性,我注意到ASP.NET Web API自托管实现使用WCF,而Signal自托管实现使用System.NET.HttpListener。这使得提出一个组合的自托管解决方案有点困难,但这确实让我想知道为什么不同的项目团队会使用不同的方法 每种方法的优缺点是什么?signar不能使用WCF自托管,或者webapi不能使用HttpListener,有什么特别的原因吗 编辑:我知道Web API自托管提供了比Sign

我一直在研究在自托管应用程序中使用ASP.NET Web API和Signal的可能性,我注意到ASP.NET Web API自托管实现使用WCF,而Signal自托管实现使用
System.NET.HttpListener
。这使得提出一个组合的自托管解决方案有点困难,但这确实让我想知道为什么不同的项目团队会使用不同的方法

每种方法的优缺点是什么?signar不能使用WCF自托管,或者webapi不能使用HttpListener,有什么特别的原因吗


编辑:我知道Web API自托管提供了比Signal更完整的堆栈,我的问题是,在实现自己的自托管解决方案时,为什么选择WCF实现而不是System.Net.HttpListener。

Web API自托管提供了整个HTTP堆栈,因此它比System.Net.HttpListener丰富得多

信号器使用它来纯粹为了自己的目的打开一个通信窗口。 所以现在,你需要在不同的端口上并行运行它们

在未来,有了奥文,你将拥有一个屋檐下的一切



编辑:实际上有一个类似于您在SigalgGithub上提出的问题,答案和我刚才说的差不多——

< P>。您可以自己使用WCF堆栈来托管服务,您可能需要考虑“IIS 7 HoStaseWeb核心”。它的好处是在用户进程中运行IIS。使用这种方法,您可以在同一端口上运行多个应用程序,而不考虑技术

如果您感兴趣,可以查看:


  • 这一切都假设您运行的是Vista或更高版本…

    我们在同一页上,Web API Self host使用的WCF Self host确实在封面下使用了HttpListener。然而,我想我可能已经发现了WCF自助主机的一个主要缺点

    我还没有确认这一点,但当您使用WebAPI Self-Host时,您提供的基址似乎没有直接转换为HttpListener前缀。似乎WCF会转换主机的基址和通配符

    这意味着WCF自身主机将响应指定端口上的任何主机。这意味着您不能使用不同的主机名在同一端口上与IIS并行运行Web API自托管服务


    这可能是Signal决定放弃WCF自主机并直接使用HTTPListener的原因。

    感谢您的回答Filip,我同意您关于Web API具有更完整堆栈的评论,但这不一定与使用WCF编写的Web API有关。我的问题更多的是关于System.Net.HttpListener方法与WCF方法相比的优点/缺点。我将对问题进行编辑以使其更清楚。Web API Self-host基于WCF Self-host,而WCF Self-host又基于HttpListener,因此由于HttpListener之上的附加功能分层,它只是“更丰富”。谢谢Werner,我知道可承载Web核心,在某些情况下它可能很有用。在我的情况下,我仍然需要支持WindowsXP,所以这一次没有帮助。我也不确定可承载web core是否能在未安装IIS的桌面计算机上工作。不清楚您使用的是哪个操作系统。您可能希望尝试tcp端口共享服务,该服务允许您在同一端口上的两个进程中托管两个应用程序。以前在Windows 2003中成功使用过它,并且在Windows XP中得到了支持,尽管我从未在该平台上使用过它。谢谢Werner,我只是想确认一下,我不是在问如何将SignalR和Web API结合起来,相反,我想问的是,为什么选择使用
    HttpListener
    而不是WCF,或者反之亦然。我一直在寻找我为什么选择
    HttpListener
    而不是WCF,或者反之亦然的比较,但仍然没有找到一个好的比较。也许我看得不够仔细。如果有人感兴趣,我已经为WebAPI和Signal编写了一个自托管解决方案。它使用了
    HttpListener
    ,原因很简单,使Web API支持
    HttpListener
    似乎更容易,而不是使signar支持WCF。我希望它有用。您是对的,WCF在封面下使用了
    HttpListener
    ——它在顶部添加了自己的层。我一直想知道它在
    HttpListener
    上增加了什么。当您在WCF自托管中指定URL时,您似乎需要在URL中使用“localhost”,它的意思是“在任何端口上侦听”,这在我看来有点奇怪。谢谢你的回复。考虑到似乎没有其他人对这个问题感兴趣(或者想告诉我使用其他东西,如OWIN、hostable web core等),我将选择您的答案。