簡體   English   中英

ASP.NET MVC應用程序中的非托管DLL導致App池在IIS服務器上停止

[英]Unmanaged DLL in ASP.NET MVC app causes App pool to stop on IIS server

我的ASP.NET MVC應用程序使用用C ++編寫的非托管外部DLL。

這個網站在Visual Studio中運行良好,正確定位和訪問外部DLL。 但是,當網站發布在本地Web服務器(運行IIS 7.5)而不是Visual Studio IIS Express時,我收到以下錯誤:

HTTP Error 503. The service is unavailable.

外部DLL位於網站的bin目錄中。看了IIS日志,我注意到每次調用dll時defaultapppool都會停止。

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

我嘗試過以下方法:

  1. 我把DLL放在System32和syswow64文件夾中。
  2. 將ASPNET,IIS_WPG和IUSR(針對該服務器)的完全權限授予網站bin目錄並重新啟動。
  3. 將外部DLL作為現有項添加到項目中,並將其“復制到輸出”屬性設置為“始終復制”。
  4. 使用目標平台x86發布應用程序,因為dll是32位。
  5. 我在集成模式下運行IIS啟用32位。
  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>

類似的問題包括無法在ASP.NET服務器上加載非托管DLL 如何在ASP.NET網站中調用非托管代碼並將其托管在IIS中

無法從ASP.NET調用DLL

當我在運行IIS 8的Web服務器上托管它時,我得到以下錯誤。所以可能在我的本地IIS服務器上它返回錯誤503因為它找不到dll但我還沒有確定這個托管的我沒有訪問權限將dll復制到系統文件夾。

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

為了找出你的應用程序搜索您的DLL,我建議微軟FusionLog 它不僅會記錄CLR搜索dll的位置,還會記錄有關加載失敗原因的更多詳細信息。

此外,查看進程是否實際打開dll的文件句柄可能會有所幫助。 您可以通過Process Explorer找到:*下載ProcessExplorer並以管理員身份運行它。 *為“進程名稱”添加過濾器並使用“w3wp.exe”*啟動應用程序池*搜索“BS_SDK.dll”的進程資源管理器,您將看到它嘗試加載它的目錄。

我重新安裝並重新安裝了IIS,然后重復了問題中的所有步驟,它終於奏效了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM