2015-03-25 39 views
10

我的ASP.NET MVC应用程序使用用C++编写的非托管外部DLL。ASP.NET MVC应用程序中的非托管DLL导致App池在IIS服务器上停止

本网站在Visual Studio中正常运行,正确定位和访问外部DLL。然而,当网站上的一个本地的网络服务器发布(运行IIS 7.5),而不是在Visual Studio IIS表达我得到以下错误:

HTTP Error 503. The service is unavailable. 

外部DLL位于website.On的bin目录看看IIS日志我注意到,每次我调用dll时,都会停止defaultapppool。

HTTP/1.1 GET /Bio/Select/3 503 1 Disabled DefaultAppPool 

我曾尝试以下:

  1. 我把在System32中和Syswow64资料夹中的DLL。
  2. 将ASPNET,IIS_WPG和IUSR(对于该服务器)的权限授予网站bin目录并重新启动。
  3. 将外部DLL作为现有项目添加到项目中,并将其“复制到输出”属性设置为“始终复制”。
  4. 用目标平台x86发布应用程序,因为dll是32位。
  5. 我有集成模式启用32位IIS上运行。
  6. 我把DLL中\ System32 \ Inetsrv目录

下面是我如何调用DLL

 [HttpGet] 
    public ActionResult Select(int ID) 
    { 
     int res = BSSDK.BS_InitSDK(); 
     if (res != BSSDK.BS_SUCCESS) 
     { 
      ModelState.AddModelError("Error", "SDK failed to initialise"); 
     } 
     return View() 
    } 

    public class BSSDK 
{ 
    [DllImport("BS_SDK.dll", 
     CharSet = CharSet.Ansi, 
     EntryPoint = "BS_InitSDK")] 
    public static extern int BS_InitSDK(); 
} 

我的观点

@model IEnumerable<BasicSuprema.Models.BioUser> 

@using GridMvc.Html 
@{ 
    ViewBag.Title = "Bio Users On DB"; 
} 
<div class="well well-sm"><h3>@ViewBag.Title</h3></div> 
@Html.ValidationMessage("Error") 
<div class="grid-wrap"> 
    @Html.Grid(Model).Named("UsersGrid").Columns(columns => 
        { 
         columns.Add(c => c.BioUserID).Titled("ID"); 
         columns.Add(c => c.UserName).Titled("User"); 

        }).WithPaging(10).Sortable(true) 

</div> 

类似的问题,包括代码段Unmanaged DLLs fail to load on ASP.NET server How to call unmanaged code in ASP.NET website and host it in IIS

Unable to call the DLL from ASP.NET

当我托管于Web服务器运行IIS 8,我得到了下面error.So也许我的本地IIS服务器返回503错误怎么把它无法找到该dll,但我还没有决定以此为托管的一个我没有访问权限将dll复制到系统文件夹。

Unable to load DLL 'BS_SDK.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
+2

在服务器内,应用程序日志中应包含更详细的错误。你是否看过并发布详细信息? – 2015-03-25 06:35:31

+0

您是否在应用程序池中使用.net框架客户端配置文件? – User2012384 2015-03-25 06:54:03

+0

@MitchelSellers你指的是哪些日志?你能否指示我在应用程序日志位置? – GotaloveCode 2015-03-25 08:11:27

回答

0

我重新安装并重新安装了IIS,然后重复了问题中的所有陈述步骤,并最终奏效了。

1

为了找出其中你的应用程序搜索你的DLL,我推荐微软FusionLog。它不仅会记录CLR搜索dll的位置,还会记录更多关于加载失败原因的详细信息。

此外,它可能会有助于查看该进程是否实际打开该DLL的文件句柄。您可以通过Process Explorer找到: *下载ProcessExplorer并以管理员身份运行。 *为'进程名'添加一个过滤器并使用'w3wp.exe' *启动您的应用程序池 *搜索'BS_SDK.dll'的进程资源管理器,您将看到它尝试加载它的目录。

+0

谢谢@chrisn会在我得到一些时间的时候对它进行调查。我确实使用了进程资源管理器,但是dint尝试了融合日志 – GotaloveCode 2015-04-02 05:04:14

相关问题