В моем приложении ASP.NET MVC используется неуправляемая внешняя DLL, написанная на С++.
Этот сайт отлично работает в Visual Studio, правильно размещая и получая доступ к внешним DLL. Однако, когда веб-сайт публикуется на локальном веб-сервере (работает с IIS 7.5), а не в Visual Studio IIS Express, я получаю следующую ошибку:
HTTP Error 503. The service is unavailable.
Внешняя DLL находится в каталоге bin на веб-сайте. Когда я смотрю журналы IIS, я заметил, что defaultapppool останавливается каждый раз, когда я вызываю DLL.
HTTP/1.1 GET /Bio/Select/3 503 1 Disabled DefaultAppPool
Я пробовал следующее:
- Я поместил DLL в папку System32 и syswow64.
- Получил полные права на ASPNET, IIS_WPG и IUSR (для этого сервера) в каталог bin сайта и перезагрузился.
- Добавлена внешняя библиотека DLL в качестве существующих элементов для проектов и установите для свойства "Копировать в вывод" значение "Копировать всегда".
- Опубликованное приложение с целевой платформой x86, поскольку dll 32-разрядная версия.
- У меня IIS, работающий в режиме Интегрированного режима, разрешает 32 бит.
- Я поместил 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>
Аналогичные вопросы включают Неуправляемые DLL файлы не загружаются на сервере ASP.NET Как вызвать неуправляемый код на веб-сайте ASP.NET и разместить его в IIS
Невозможно вызвать DLL из ASP.NET
Когда я размещал его на веб-сервере, на котором запущен IIS 8, я получаю следующую ошибку. Возможно, на моем локальном сервере IIS он возвращает ошибку 503 coz, он не может найти dll, но я еще не определил это как для размещенного. Я не имеют доступа для копирования dll в системные папки.
Unable to load DLL 'BS_SDK.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)