Приложение ASP.NET разрывается при развертывании в IIS - PullRequest
0 голосов
/ 07 ноября 2008

Я занимаюсь разработкой небольшого веб-сайта ASP.NET для покупок в Интернете, при тестировании его в Visual Studio все работает нормально, однако это уже не тот случай, когда я развертываю его в IIS.

Кажется, проблема в DLL-файле, на который я ссылаюсь, этот DLL-файл содержит классы, необходимые для инициализации и отправки запросов на другой сервер, на котором есть вся информация о продукте. Эта DLL изначально была файлом JAR, который я преобразовал в DLL с помощью IKVM.

Когда я развертываю приложение в IIS, любая страница, которая пытается создать экземпляр объекта, определенного в этой DLL, завершается с нулевой ссылкой, например:

Fulfiller fulfiller = new Fulfiller();
string result = fulfiller.initialize("host", port, "user", "pass");

возвращает эту ошибку:

System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта. в Fulfiller.toLog(String ) в Fulfiller.initialize(String str1, Int32 i, String str2, String str3) в Orders.createDataSource()

Теперь снова, это прекрасно работает на сервере разработки VS, но ломает IIS, и я не знаю почему. Это какая-то проблема кодирования, когда DLL не загружается должным образом при работе на IIS? или это проблема с IIS, может быть, блокировка DLL от выполнения или отправки запросов, я очень отчаянно пытаюсь решить эту проблему

спасибо

Ответы [ 4 ]

3 голосов
/ 07 ноября 2008

Обычно, когда что-то, что работает на сервере разработки, не работает на IIS, проблема заключается в авторизации (сервер VS работает под вашими учетными данными, но IIS работает как «Сетевая служба» или другой системный пользователь).

Например, я вижу, как ваш код разрывается на executeiller.toLog ().

Может ли быть так, что функция toLog () пытается открыть файл журнала и что пользователь, выдаваемый за IIS, не авторизован для чтения или записи?

0 голосов
/ 07 ноября 2008

Я не использовал IKVM, но уверен, что на сервере должна быть установлена ​​среда выполнения IKVM. Вы проверили IKVM на сервере?

Надеюсь, это поможет.

0 голосов
/ 07 ноября 2008

Я второй ответ Лорис.

Сервер разработчика имеет ваши разрешения. Предполагая, что вы развертываете на Windows Server или любой машине, на которой работает Active Directory, вы сможете щелкнуть правой кнопкой мыши каталог, в котором хранятся файлы журнала, и выбрать свойства. В диалоговом окне появится вкладка с надписью Безопасность. Если пользователь сетевой службы (или IUSR_machinename) не виден, вам придется добавить его в список. Выберите пользователя и назначьте ему права на чтение и запись.

Не предоставляйте пользователю IIS полные права доступа ко всему каталогу приложения. Это огромная уязвимость безопасности, поэтому развертывание по умолчанию не дает вам необходимых вам разрешений.

0 голосов
/ 07 ноября 2008

Что делает executeiller.Initialize ()? Вы можете опубликовать этот код?

Очевидно, у вас есть ссылка на исполнитель, потому что вы не можете передать конструктор без ошибки, а затем иметь нулевой код.

...