WCF调用第三方DLL仅适用于VS2015,但没有

时间:2016-09-07 13:45:04

标签: c# wcf iis visual-studio-2015 iis-express

我正在使用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为两者工作,任何帮助都将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

更新已解决!

我设法解决了这个问题。在IIS 7.5.76中,我将 DefaultAppPool 高级设置设置为

1).NET Framework Version v4.0

2)启用32位应用程序= true

3)Identity = LocalSystem

现在,我的WCF服务和方法(调用第三方DLL)可以与IIS一起使用,我可以将其作为生产服务运行!