Приложение ASP.NET, использующее неверный путь к файлу при публикации на компьютере с Windows Server 2008

У меня есть приложение asp.net, которое я модифицирую. Я настраиваю Visual Studio 2010 для публикации на сервере разработки, на котором работает Windows Server 2008 RC 2 (не думаю, что это имеет значение). Я добавил новую веб-форму в приложение через визуальную студию «добавить новый элемент», и она работает на моем локальном компьютере. Когда я публикую на сервере, он начинает выдавать криптографические исключения, потому что пытается получить доступ к файлу .p12 для отправки push-уведомлений Apple на устройство iphone. Сначала я подумал, что с сертификатом что-то не так, поэтому я добавил операторы печати в код и заметил, что он пытается получить доступ к новой странице по пути к файлу на моем локальном компьютере, а не по пути к файлу на сервере. У кого-нибудь есть идеи, почему это делается? Есть ли способ сделать путь к файлу относительно проекта?


person MBU    schedule 08.06.2011    source источник


Ответы (2)


Вы должны использовать MapPath("{relativePath/FileName}") . Это вернет физический путь.

filename = MapPath("/images/logo.jpg")

Будет что-то вроде "C:\inetpub\webroot\images\logo.jpg"

person Robert Beaubien    schedule 08.06.2011
comment
путь к файлу сертификата в порядке. Неверный путь к файлу для фактической веб-страницы. Я распечатываю трассировку стека для исключения, и он говорит, что проблема в C:\Users\myusername\Desktop\myapp\newpage.aspx, строка: 71, когда должна быть строка C:\inetpub\wwwroot\newpage.aspx: 71 - person MBU; 08.06.2011
comment
На самом деле трассировка стека верна, так как показывает путь к файлу, в котором он находился при компиляции, поскольку эта информация хранится в файле .pdb, созданном во время сборки. Таким образом, на самом деле он запускается из c:\inetpub\wwwroot\newpage.aspx на вашем сервере, но трассировка стека покажет место, где файл находился во время его компиляции. - person Paige Cook; 08.06.2011
comment
ооо ок. у вас есть какие-либо другие идеи о том, почему он получает криптографическую ошибку на сервере, а не на моей локальной машине? - person MBU; 08.06.2011

Сервер значения не имеет. Файл был добавлен с абсолютным путем. Не знаю, почему, и нет времени на исследования.

Как настроен сайт на вашей отладочной машине? Вы используете IIS или сервер разработки ASP.NET? Не уверен, что это имеет большое значение, но переход на IIS и более качественная имитация производства часто решает эти маленькие ошибки. Для переключения добавьте папку в IIS, затем удалите проект и повторно включите с путем HTTP вместо папки проекта.

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

person Gregory A Beamer    schedule 08.06.2011
comment
на моей локальной машине настроено использование сервера asp.net dev. Попробую переключить на iis. - person MBU; 08.06.2011
comment
Это, безусловно, помогает, когда вы пытаетесь выяснить различия между местным и производственным. - person Gregory A Beamer; 08.06.2011
comment
Та же проблема. это работало на моей машине, но не на сервере. Я думаю, что это как-то связано с сертификатом... я не уверен, что, хотя он работает на моей машине... - person MBU; 08.06.2011
comment
@MBU: Вы также используете сервер разработки ASP.NET? И проверили ли вы, является ли путь жестко закодированным, неявно (инструментом) или явно (вы как-то это сделали)? Оба являются правильными шагами по устранению неполадок. - person Gregory A Beamer; 09.06.2011
comment
понял, что проблема не в пути. Что-то тут не так с сертификатами. Когда я запускаю сервер asp.net dev, все работает нормально. но когда я переключаюсь на iis, это не дает криптографической ошибки исключения. Существуют ли различия в способе чтения сертификатов при работе под iis? - person MBU; 09.06.2011