我已经创建了一个基本的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”,它是托管的,所以在调试模式打开之前地址确实不存在,所以我实际连接到visual studio的临时托管版本提供而不是真正的IIS托管的Web服务?)
2)当直接将WCF服务库部署到IIS时,使用服务协定的命名空间和类名指向.svc文件总是正确的,即使该文件确实不存在(I'我猜这是IIS为你执行的魔术)?
答案 0 :(得分:1)
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启动服务。