我正在使用64位Windows7家庭高级版SP1和VS2015。
我写了一个WCF应用程序,它调用用C#编写的第三方dll(来自供应商)。当我在浏览器中查看"通过右键单击VS2015解决方案资源管理器中的ProductREADService.svc,我可以调用svc(localhost:17476 / ProductRESTService.svc)和方法(这称为第三方dll localhost:17476 / ProductRESTService.svc / getproductlist / 1)并且WCF正常工作在浏览器(chrome和IE)上没有任何问题,正确返回xml结果。
现在我希望这个WCF在没有VS2015的情况下运行,因为我需要它在生产环境中运行。
问题:
1) 但是,当我将此WCF发布到IIS7.5时,我能够毫无问题地调用svc(localhost:8123 / ProductRESTService.svc),但是当我调用该方法时(localhost:8123 / ProductRESTService.svc / getproductlist / 1)我遇到请求错误"服务器遇到处理请求的错误。有关详细信息,请参阅服务器日志。" 当我检查日志时,我发现了这个: 2016-09-07 12:46:44 :: 1 GET /favicon.ico - 8123 - :: 1 Mozilla / 5.0 +(Windows + NT + 6.1; + WOW64)+ AppleWebKit / 537.36 +(KHTML,+ like + Gecko )+ Chrome / 52.0.2743.116 + Safari / 537.36 404 0 2 3 2016-09-07 12:48:26 :: 1 GET /ProductRESTService.svc/getproductlist/1 - 8123 - :: 1 Mozilla / 5.0 +(Windows + NT + 6.1; + WOW64)+ AppleWebKit / 537.36 +(KHTML, +喜欢+ Gecko)+ Chrome / 52.0.2743.116 + Safari / 537.36 400 0 0 4
我尝试将DefaultAppPool标识更改为LocalService和我的Windows登录ID,但没有任何作用。
为了确认问题在于第三方DLL,我改变了方法getproductlist,不是加载/调用第三方DLL而是返回固定的虚拟值,现在两者都完美无缺。所以我确定问题是由DLL在没有VS2015的情况下运行引起的。
2)我恢复了代码并停止了IIS并尝试运行IISExpress(使用vs2015使用的IISexpress)。我在/config:path-to-code.vs\config\applicationhost.config中使用与VS2015相同的配置文件启动它...我遇到了完全相同的问题,同时访问localhost:17476 / ProductRESTService.svc没有问题..但是在访问方法localhost时遇到错误:17476 / ProductRESTService.svc / getproductlist / 1.
问题:
q1)为什么WCF调用第三方DLL只能在使用VS2015启动时工作,而不是在通过IIS7.5或IISexpress独立启动时?
q2)如何将IIS20press的IISexpress设置/配置复制到IIS7.5和c:\ program files \ IIE Express \ IISexpress.exe?
任何帮助将不胜感激。谢谢!
更新 2)我发现了IISExpress的问题..我改为" C:\ Program Files(x86)\ IIS Express \ iisexpress.exe"而不是" C:\ Program Files \"和svc和方法都有效!为什么不" C:\ Program Files"因为我的操作系统是64位?
我仍然无法让IIS为两者工作,任何帮助都将不胜感激!
谢谢!
答案 0 :(得分:1)
更新已解决!
我设法解决了这个问题。在IIS 7.5.76中,我将 DefaultAppPool 高级设置设置为
1).NET Framework Version v4.0
2)启用32位应用程序= true
3)Identity = LocalSystem
现在,我的WCF服务和方法(调用第三方DLL)可以与IIS一起使用,我可以将其作为生产服务运行!