Как развернуть сайт ASP.NET с компонентом Linq to Sql - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть веб-приложение .NET 3.5, в которое я недавно добавил некоторые функции Linq to Sql - файл dbml и т. Д. Локально он работает нормально.

Однако, когда я пытаюсь развернуть его,Я получаю исключение нулевой ссылки, по-видимому, когда он пытается вызвать конструктор для объекта контекста.

Чтобы добавить сложности, я использую проект веб-развертывания, который собирает его в одну DLL.Я предполагал, что материал Linq to Sql будет скомпилирован вместе со всем остальным.Тем не менее, теперь я думаю, что мне нужно переместить файл dbml вместе с DLL.

У меня был файл dbml в каталоге App_Code, поэтому я попытался воссоздать эту структуру каталогов на удаленном сервере.Но .NET не позволит мне иметь каталог App_Code в предварительно скомпилированном приложении.Поэтому я просто переместил файл dbml в корневой каталог - но все равно получаю ошибку.

Help!

Вот трассировка стека для получаемой ошибки:

[NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.] CodeCS.SarcStateDataDataContext..ctor () +28 DB_Interface.SarcStateDataDB..ctor () +26 eSARC_Basic..ctor () +56 ASP.esarc_basic_aspx ..ctor () +14 __ASP.FastObjectFactory_sarcwriting.Create_ASP_esarc_basic_aspx () +20 System.Web.Compilation.BuildResultCompiledType.CreateInstance () +32 системный.noAssert) +119 System.Web.VirtualPath virtualPath,String PhysicalPath) +40 System.Web.HttpApplication.MapHttpHandler (контекст HttpContext, String requestType, путь VirtualPath, String pathTranslated, логическое значение useAppConfig) +160 System.Web.MapHandlerExecutionStep.System.Web.HttpAecution (.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершенный синхронно) + 155

DB_Interface.SarcStateDataDB - это класс, который я написал и который вызывает конструктор для объекта контекста:

codeCS.SarcSteData = DataSarcStateDataDataContext ();

Я не отправляю ему строку подключения или объект подключения, поскольку как локальная, так и развернутая версии программы используют одну и ту же удаленную базу данных.Но может ли это быть проблемой?Локальное приложение имеет доступ к строке подключения в файле dbml, но развернутое приложение не ... ??

ОБНОВЛЕНИЕ: я посмотрел код в Reflector, и он получает строку подключения изweb.config, и в этом вопросе все выглядит в общих чертах ...

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

ОК, я нашел проблему!Имя строки подключения, которое он искал - SarcWritingConnectionString - было чем-то, что, очевидно, Linq to Sql добавил в web.config, когда я настраивал его изначально, проходя через мастер.И я не перенес новый файл web.config на сервер при развертывании проекта, потому что думал, что он не изменился.Когда я перемещаю его вверх, все работает!

(я использовал соединение для передачи данных, которое я уже установил в обозревателе сервера, вместо строки соединения, которая уже была в web.config - я даже не был уверенкак это сделать.)

Спасибо за вашу помощь - приятно знать, что мне не нужно перемещаться вверх по файлу dbml.В следующий раз будет проще!

1 голос
/ 02 декабря 2010

Я бы посоветовал вам передать DB_Interface.SarcStateDataDB строку подключения, которую вы хотите использовать при создании экземпляра класса, а затем использовать ее в codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();.

Затем вы можете управлять строкой соединения на уровне приложения, предположительно в вашем файле web.config. Таким образом, если вы когда-нибудь переключитесь на использование dev db, отдельной от prod, вы легко перейдете к отдельным строкам подключения.

1 голос
/ 02 декабря 2010

Привет, Синтия. Вам не нужно развертывать файл .dbml.Исключение с нулевой ссылкой не вызвано отсутствием .dbml.Трудно угадать проблему с предоставленной информацией, но прежде всего убедитесь, что данные в базе данных производства и разработки совпадают.Возможно, в производственной базе данных отсутствуют какие-либо записи, и вы получаете нулевую ссылку оттуда.Также убедитесь, что вы разворачиваете проект с помощью VS Publishing Wizard (щелкните правой кнопкой мыши по проекту -> Опубликовать).Кроме того, если это не поможет, не могли бы вы опубликовать трассировку стека исключения?Спасибо

...