【问题标题】:WCF calls 3rd party DLL only works in VS2015 but not withoutWCF 调用 3rd 方 DLL 仅适用于 VS2015 但并非没有
【发布时间】:2016-09-07 13:45:03
【问题描述】:

我使用的是 64 位 Windows7 家庭高级版 SP1 和 VS2015。

我编写了一个 WCF 应用程序,它调用用 C# 编写的第 3 方 dll(来自供应商)。当我通过在 VS2015 解决方案资源管理器中右键单击 ProductREADService.svc 来“在浏览器中查看”时,我可以调用 svc(localhost:17476/ProductRESTService.svc) 和方法(这会调用第 3 方 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, +like+Gecko)+Chrome/52.0.2743.116+Safari/537.36 400 0 0 4

我尝试将 DefaultAppPool 身份更改为 LocalService 和我的 Windows 登录 ID,但没有任何效果。

为了确认问题出在第 3 方 DLL,我将方法 getproductlist 更改为不加载/调用第 3 方 DLL,而是返回固定的虚拟值,现在两者都可以正常工作。所以我确定问题是在没有 VS2015 的情况下运行时的 DLL 引起的。

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) 为什么调用第 3 方 DLL 的 WCF 仅在使用 VS2015 启动时有效,而在通过 IIS7.5 或 IISexpress 独立启动时无效?

q2) 如何将 IISexpress 设置/配置从 VS2015 复制到 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 为两者都工作,任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 你能在你的本地机器上安装IIS,看看你能不能在那里配置它?很可能它没有找到第 3 方 dll。需要安装吗?路径一样吗?
  • 是的,IIS 和 IISexpress 都在本地 PC 上。奇怪的是,IISexpress 网站(端口 17476)只有在我使用 VS2015 运行时才能完美运行。当我在没有 VS2015 的情况下从命令行运行 IISexpress(端口 17476)时,只有 svc 工作...... getproductlist 方法不起作用。

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


【解决方案1】:

更新已解决!

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

1) .NET Framework 版本 v4.0

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

3) 身份 = 本地系统

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多