【问题标题】:Self-hosting a WCF service自托管 WCF 服务
【发布时间】:2014-01-24 22:06:25
【问题描述】:

我正在使用 WCF 服务并将其托管在控制台应用程序中。我的所有配置都在一个 XML 文件中。该服务运行良好,我可以从客户端很好地连接它,但令我困扰的是,当我启动它时,WcfSvcHost 应用程序启动(在我的图标托盘中)并显示“您的服务已被托管...... ”。但是当我点击它时,它会显示我的服务并在状态下显示已停止(错误是没有定义端点)。

我有两个项目,一个是服务,另一个是托管它。错误指向其中包含服务的项目,该项目没有定义配置,因为(我假设)那里不需要它。我的所有配置都在托管服务的项目中,在 App.config 中。

我如何摆脱该消息?这到底是个问题还是正常?

附:我只启动托管服务的项目,而不是具有服务代码的项目。

【问题讨论】:

  • 我很困惑。 IIS 不会托管您的服务吗?另一个项目如何托管 WCF 服务?
  • @crush 您可以从代码中托管 WCF 服务,只需选择一个端口并说“开始侦听 HTTP 请求”。
  • @TimothyShields Web.config 是否适用于这种情况?
  • 是的,您可以使用 IIS,但您也可以自行托管它,只需将服务项目包含在另一个项目中,添加对 System.ServiceModel 的程序集引用并在代码中执行此操作:ServiceHost selfHost = new ServiceHost(typeof(YourService));并打开它:selfHost.Open();
  • @crush:您还可以避免在 IIS 中托管的所有缺点和问题.....

标签: c# wcf self-hosting


【解决方案1】:

点击项目后,我找到了解决方案。如果您右键单击服务库项目,在 WCF 选项下,有一个选项“在解决方案中调试另一个项目时启动 WCF 服务主机”,只需取消选中它就会停止。

另外,请查看 Scott Chamberlain 的回答,在某些情况下这可能是原因。

【讨论】:

    【解决方案2】:

    如果WcfSvcHost 正在启动,则您的托管应用程序未启动。即使您说您正在启动托管应用程序,请仔细检查您是否将服务库设置为启动项目。

    在上图中,启动项目应为 HostingApp,您可能已将其设置为 WcfServiceLibrary


    另一种可能是您的托管应用程序设置错误,在托管应用程序的项目设置中,检查输出类型是否为Windows Application

    如果您将其设置为Class Library,那么在您的“命令行参数”中您有/client:"WcfTestClient.exe",这也会导致您的问题。如果您将项目作为“服务库”开始,但后来决定将其转入托管应用程序,则很容易发生这种情况。

    【讨论】:

    • 我检查了所有这些,我很确定我的所有设置都是正确的。我 100% 确定我的托管应用程序正在启动(它是 WPF 并打开一个窗口,您可以在其中启动/停止服务。但当我只使用控制台应用程序时我也遇到了这个问题)。我正在使用 VS 2013 Ultimate。我有一些项目依赖项,托管项目依赖于依赖于另一个项目的服务库。我有一个单独的启动项目集(托管应用程序),它是一个 Windows 应用程序,服务库是一个类库。
    • 我明白了!如果您右键单击服务库项目,在 WCF 选项下,有一个选项“在解决方案中调试另一个项目时启动 WCF 服务主机”,只需取消选中即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多