何时以及为何托管 WCF 服务?
Posted
技术标签:
【中文标题】何时以及为何托管 WCF 服务?【英文标题】:when and why to host WCF service? 【发布时间】:2014-05-01 09:48:49 【问题描述】:我已经通过 WCF 和相关主题,创建了我的第一个 WCF 服务。它工作正常,但问题是我不了解托管概念。
不同的教程做不同的事情,比如一些创建单独的控制台应用程序为其托管服务,然后在 Asp.net 应用程序中使用它,但有些不会在任何地方托管它,只是添加对另一个项目的引用并使用它。
我不明白什么时候在哪里托管以及为什么托管?
请在这个问题上帮助我。我正在使用带有 .net 4 和 asp.net c# 的 Visual Studio 2013。
【问题讨论】:
阅读本文了解托管和消费 WCF 服务 - msdn.microsoft.com/en-us/library/bb332338.aspx 我认为你应该阅读这个.. ***.com/questions/1204365/… "有些不会在任何地方托管它,只是添加对另一个项目的引用并使用它。"这是一个误解,你必须在继续之前纠正它。如果没有托管,WCF 服务将无法工作。在某些情况下您可能不知道如何检查谁托管它,但它必须托管。 【参考方案1】:基本上,WCF 服务需要托管在某个地方,以便可以从其他地方访问它。有几种方法可以做到这一点(可能比我知道的还要多),但其中两种最简单和最常见的方法是在 IIS Express 或 IIS(Internet 信息服务器)中托管服务。
IIS Express
实现第一个(IIS Express)的最简单方法是在 Visual Studio 中简单地右键单击项目,然后选择View in Browser
。这将在您的浏览器中打开一个目录列表,在该目录中您应该会看到一个以.svc
结尾的文件。单击该文件应打开服务描述页面,其中包含如下文本:
您已经创建了一个服务。
要测试此服务,您需要创建一个客户端 (...)
该页面的 URL 实际上是 URL 客户端需要连接到您的服务。它应该类似于http://localhost:64835/YourServiceName.svc
。
这意味着该服务在本地托管,在端口 64835 上,可供该地址上的客户端访问。然而,由于这是在 IIS Express 中,一旦您关闭 Visual Studio,它将不再可访问,因为它只是作为其中的一部分运行。
IIS 正确
在 IIS 中托管意味着只要 IIS 运行,您的服务就可以访问。安装后,它通常会在您登录时启动,并在后台静默运行。当它运行时,您只需访问正确的 URL 即可启动您的服务。如果它没有运行,可能需要几秒钟才能启动它。下次调用它时,它应该快速响应。
请注意,在 IIS 中,默认情况下,应用程序将在端口 80 上运行,这是浏览器和可能的其他客户端检查的默认端口 - 这意味着您不需要像上面的示例中那样指定它。因此,该 URL 通常会更简单,例如 http://localhost/yourservice/yourservice.svc
(尽管您可以将其配置为另一个端口或另一个协议(例如 https://..
,或者如果您愿意的话)。
一旦配置好并且相关端口打开,您的服务应该可以被世界其他地方访问。
注意:从外界看,网址会有所不同; 可能类似于:
http://123.456.789.123/yourservice/yourservice.svc
,如果那是你的 IP 地址,或者
http://yourdomain.com/yourservice/yourservice.svc
如果您设置了域。
【讨论】:
除此之外,您还可以选择以下托管选项 => WAS、Windows 服务、常规控制台应用程序,如果您想尽情发挥,甚至可以使用 WPF/Winforms 应用程序来托管 WCF 服务。 是的,没错。 :) 我刚刚提到了这两个,因为我猜它们是最常见的,并且对于区分应用程序的临时托管和更永久托管之间的区别也很有用。 伟大的,惊人的,绝妙的解释。 + 我需要手动设置 web.config、app.config 还是自动设置? 让我总结一下以澄清我的困惑。 1. 创建服务 2. 以可以随时访问的速度托管它(例如在购买的服务器操作系统的 Windows 服务中) 3. 所以如果有人例如如果你想使用它,那么你只需要将 ref 添加到你的项目中,然后就可以了?【参考方案2】:我建议您考虑将托管分为两类:
-
自托管
IIS 托管
根据您的问题“何时在何处托管以及为什么托管”,我想说您仅在测试期间自行托管 WCF 服务。大多数情况下,自托管不用于实时/生产环境。对于生产环境,请使用 ISS 托管。
自托管可用于在本地计算机和 Intranet 上进行测试,而 IIS 托管可用于 Internet。
但是,必须注意的是,对于在任何特定情况下使用特定托管技术,并没有这样的规则。凭借经验,开发人员将成为最佳评判者。
【讨论】:
自托管是指在 IIS EXPRESS 中? 当 WCf 托管在控制台应用程序、Web/Windows 表单等上时,使用自托管术语。我对 IIS Express 不太了解。所以,这方面没有 cmets。以上是关于何时以及为何托管 WCF 服务?的主要内容,如果未能解决你的问题,请参考以下文章
如果我要在 IIS 中托管 WCF 服务,使用 WCF 服务而不是 WCF 库有啥好处?
通过 Windows 服务托管 WCF 服务库获得 System.InvalidOperationException:尝试启动 WCF 服务