【问题标题】:How To Deploy WCF To IIS And Have It Stay Alive如何将 WCF 部署到 IIS 并使其保持活动状态
【发布时间】:2014-01-26 05:31:20
【问题描述】:

我创建了一个基本的 WCF 服务库项目并将其部署到我的本地 IIS 安装 (7.5)。 每当我尝试通过 localhost/TestWcfServiceLibrary/ 导航到它时,我都会得到一个目录视图。

但是,如果我从 Visual Studio 以调试模式启动服务,我会收到系统托盘弹出窗口,告诉我它已被托管,然后当我返回 localhost/TestWcfServiceLibrary/ 时,我可以看到 wsdl . 一旦我停止调试模式并刷新浏览器,我就会回到目录视图。

配置文件中的基地址是 localhost/TestWcfServiceLibrary/ 所以我不明白为什么我会看到这种行为。

有趣的是,如果我导航到 localhost/TestWcfServiceLibrary/service.service1.svc(一个不存在的文件),即使调试模式关闭,我也会得到 wsdl。

所以我有 2 个问题。

1) 为什么 Visual Studio 中的调试模式对我是否可以从路径 localhost/TestWcfServiceLibrary 访问 wsdl 有任何影响? (我怀疑这是因为 wcf 服务在技术上不是托管在“localhost”,而是托管在提供而不是真正的 IIS 托管 Web 服务?)

2) 将 WCF 服务库直接部署到 IIS 时,使用服务合同的命名空间和类名指向 .svc 文件是否总是正确的,即使该文件实际上并不存在(I'我猜这就是 IIS 为您执行的魔法)?

【问题讨论】:

    标签: c# wcf web-services iis


    【解决方案1】:

    1) 您可以在 WCF 项目属性的“Web”选项卡中查看 Web 服务的托管位置。 VS.NET 中的默认行为是将项目托管在 IISExpress 中,这是 Visual Studio.NET 附带的一个迷你 IIS,它会在您运行服务时自动启动。因此,如果您没有更改默认值,那么是的,您的服务在技术上托管在“localhost”,但不是在 IIS 中的端口 80 上,而是在 IISExpress 中的另一个端口上(确切的端口不同)......我猜是 IISExpress决定在您浏览到服务地址时为您提供 wsdl。这不是 IIS 的默认行为。如果在 web.config 中启用了目录浏览,这将显示文件夹内容,否则会显示 404(未找到)错误。

    2) 有两种方法可以在 IIS 中激活 WCF 服务。您可以提供一个真实的 .svc 文件,其中列出了 IIS 应该启动的服务实现。您可以在 web.config 文件的节点中指出这一点。它是触发 IIS 启动服务的 URL 的 .svc 部分。

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2017-01-14
      相关资源
      最近更新 更多