2015-03-25 9 views
10

stoppen Meine ASP.NET MVC App verwendet eine nicht verwaltete externe DLL in C++ geschrieben.Nicht verwaltete DLL in ASP.NET MVC App verursacht App-Pool auf IIS-Server

Diese Website kann problemlos in Visual Studio ausgeführt werden, indem die externen DLLs korrekt lokalisiert und aufgerufen werden. Wenn jedoch die Website auf einem lokalen Webserver veröffentlicht (mit IIS 7.5), anstatt dem Visual Studio IIS Express ich die folgenden Fehlermeldung erhalten:

HTTP Error 503. The service is unavailable. 

Die externe DLL im Verzeichnis ist der website.On befindet Wenn ich mir die IIS-Logs anschaue, ist mir aufgefallen, dass der defaultapppool bei jedem Aufruf der DLL anhält.

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

Ich habe folgendes versucht:

  1. Ich habe die DLL in System32 und syswow64 Ordner.
  2. Gaben die vollen Rechte für ASPNET, IIS_WPG und IUSR (für diesen Server) auf die Website Bin-Verzeichnis und neu gestartet.
  3. Die externe DLL als vorhandene Elemente zu den Projekten hinzugefügt und ihre Eigenschaft "Copy to Output" auf "Copy Always" setzen.
  4. Die App mit Zielplattform x86 veröffentlicht, da die DLL ein 32-Bit ist.
  5. Ich habe IIS läuft im integrierten Modus aktivieren 32 Bit.
  6. Ich habe die DLL in der \ System32 \ Inetsrv

Im Folgenden ein Code-Snippet wird, wie ich rufe dem 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(); 
} 

Meine Ansicht

@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> 

ähnliche Fragen umfassen 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

Wenn ich es auf Web-Server läuft gehosteten IIS 8 ich die unten error.So vielleicht auf meinem lokalen IIS-Server bekommen es gibt Fehler 503 Coz es nicht die DLL finden kann, aber ich bin noch diese zu bestimmen, wie für Die gehostete habe ich keinen Zugriff auf die DLL in die Systemordner kopieren.

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

Innerhalb des Servers sollte ein detaillierterer Fehler im Anwendungsprotokoll enthalten sein. COuld Sie sehen und posten Details? –

+0

Verwenden Sie das .NET Framework-Clientprofil im Anwendungspool? – User2012384

+0

@MitchelSellers Welche Protokolle bezeichnen Sie? Könnten Sie mich bitte auf den Standort des Anwendungsprotokolls verweisen? – GotaloveCode

Antwort

0

Ich deinstalliert und installiert IIS neu dann alle angegebenen Schritte in der Frage wiederholt und es hat schließlich funktioniert.

1

Um herauszufinden, wo Ihre Anwendung nach Ihrer DLL sucht, empfehle ich Microsoft FusionLog. Es protokolliert nicht nur, wo die CLR nach dlls sucht, sondern protokolliert auch weitere Details darüber, warum das Laden fehlgeschlagen ist.

Darüber hinaus kann es hilfreich sein zu sehen, ob der Prozess tatsächlich ein Dateihandle für die DLL öffnet. Sie können dies über den Process Explorer herausfinden: * Laden Sie ProcessExplorer herunter und führen Sie es als Administrator aus. * Fügen Sie einen Filter für 'Prozessname' hinzu und verwenden Sie 'w3wp.exe' * Starten Sie Ihren Anwendungspool * Suchen Sie Prozess Explorer für 'BS_SDK.dll' und Sie werden sehen, aus welchem ​​Verzeichnis es versucht, es zu laden.

+0

danke @chrisn wird es untersuchen, wenn ich etwas Zeit bekomme. Ich habe Process Explorer verwendet, aber nicht versuchen, fusionlog – GotaloveCode