【发布时间】:2010-05-24 18:25:45
【问题描述】:
我想我的大脑已经忙于 IIS 和 Web 应用程序,以至于我想不出一个理由来解决使用自托管 WCF 服务的麻烦。我一直都可以使用 IIS,因此创建自托管 WCF 服务似乎比我想做的工作要多。我为什么要这样做?
【问题讨论】:
我想我的大脑已经忙于 IIS 和 Web 应用程序,以至于我想不出一个理由来解决使用自托管 WCF 服务的麻烦。我一直都可以使用 IIS,因此创建自托管 WCF 服务似乎比我想做的工作要多。我为什么要这样做?
【问题讨论】:
很多点:
http://server/virtualdir/yourservice.svc,而自托管您可以使用http://Server:7171/Services/MegaService 或任何你喜欢的)ServiceHost的创建和选项
【讨论】:
这完全取决于您想如何使用 WCF。您希望作为服务公开的逻辑并不总是需要/可以托管在 IIS 中。例如:
【讨论】:
例如,让我们考虑在 Windows 服务中托管的优势:
你也可以考虑
【讨论】:
如果您运行的是 64 位 Windows,则无法自动编译和运行 WCF 服务,您必须自行托管。
我在这里询问了一种特殊情况: Ways to access a 32bit DLL from a 64bit exe
我有一个需要使用 32 位 DLL 的 64 位应用程序。所以我想我只是将 32 位 DLL 包装在 32 位 WCF 服务中。不去。我无法强制服务运行 32 位。必须自己托管。
【讨论】:
一个示例用例是客户端应用程序。您可以在客户端应用程序中自托管 WCF 服务,以便客户端可以接收来自后端系统的通知。
【讨论】:
高负载服务 net.tcp 或 net.pipe 绑定根本不适用于 IIS。 它仅适用于 IIS 7 + 额外的 3 种服务:WAS、Net.* 侦听适配器和端口共享(如果您不使用共享,则为事件)。这是非常复杂的解决方案。你必须配置port sharing,但是有一天它会因为套接字或管道错误而崩溃。 SelfHost 不会。
IIS 不适用于流式传输。 您不会“直接使用网络流”工作。您将使用内存缓冲区或临时文件,因此您不会从流式传输中受益。
附:这都是关于 WCF 3.5 和 IIS 7.5 的。我希望下一个版本会更好。
【讨论】: