【问题标题】:How can I launch an executable from an IIS-hosted WCF service?如何从 IIS 托管的 WCF 服务启动可执行文件?
【发布时间】:2010-11-29 14:47:43
【问题描述】:

我们有一个 WCF 服务,我们最近从自托管切换到 IIS 托管。它需要使用 Process.Start() 启动可执行文件。这在自托管时工作正常,但在 IIS 中托管时,我们会收到错误:

System.ComponentModel.Win32Exception: 系统找不到指定的文件

我们在 bin 目录和应用程序根目录(.svc 文件旁边)中都有 exe。但是,它似乎找不到 exe。

任何帮助将不胜感激。谢谢!

编辑:我忘了提到我们正在使用以下代码启动: Process.Start("LeakingWrapper.exe");

进一步信息:不幸的是,我们没有将 exe 切换为 dll 的选项,因为它包装了一个泄漏内存的第三方库。因此,我们必须将其放入自己的进程中,以确保我们长期运行的 WCF 服务不会泄漏!

【问题讨论】:

    标签: wcf iis


    【解决方案1】:

    您是否将aspNetCompatibilityEnabled 设置设为真?在这种情况下,您将拥有一个 HttpContext,它可以尝试使用以下方式调用:

    string exeFileName = HttpContext.Current.Server.MapPath("~/LeakingWrapper.exe")
    

    或者:如果你指定EXE的整个路径,例如

    Process.Start("C:\yourServiceDir\bin\LeakingWrapper.exe") 
    

    这有帮助吗??

    马克

    【讨论】:

    • 我们最终使用了您的第二个建议并将完整路径存储在 web.config 中,然后将其传递给 Process.Start()。感谢您的帮助!
    【解决方案2】:

    marc_s 的答案可能是正确的。

    但是,也有可能是进程找不到该文件,因为它没有读取exe文件的权限。

    【讨论】:

    • 我使用进程监视器来确保它不是权限问题。 w3wp.exe 只是找不到可执行文件!
    【解决方案3】:

    要使用HttpContext 使用 Web 服务的路径,您必须在 Web 服务的 web.config 中包含以下行

    <configuration>
    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    </system.serviceModel> 
    </configuration>`
    

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多