C# 如何将WCF部署到IIS并使其保持活动状态

C# 如何将WCF部署到IIS并使其保持活动状态,c#,wcf,web-services,iis,C#,Wcf,Web Services,Iis,我创建了一个基本的WCF服务库项目,并将其部署到本地IIS安装(7.5)中。 每当我试图通过localhost/TestWcfServiceLibrary/导航到它时,我只会得到一个目录视图 但是,如果我从VisualStudio以调试模式启动服务,系统托盘弹出窗口会告诉我该服务已被托管,然后当我返回localhost/TestWcfServiceLibrary/时,我就能够看到wsdl。 一旦我停止调试模式并刷新浏览器,我就回到目录视图 配置文件中的基址是localhost/TestWcfSe

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

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

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

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

所以我有两个问题

1) 为什么VisualStudio中的调试模式对我是否可以从localhost/TestWcfServiceLibrary路径访问wsdl有任何影响?(我怀疑这是因为wcf服务在技术上不是托管在“localhost”上的,而是托管在,所以在调试模式打开之前,地址实际上并不存在,所以我实际上连接到了visual studio提供的临时托管版本,而不是真正的IIS托管Web服务?)

2) 将WCF服务库直接部署到IIS时,即使该文件实际上并不存在,但指向带有服务契约名称空间和类名的.svc文件是否总是正确的(我猜这就是IIS为您发挥的魔力)?

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

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