2010-12-02 4 views
0

나는 최근에 Linq를 SQL 기능에 추가 한 .NET 3.5 웹 응용 프로그램이 있습니다. dbml 파일 등입니다. 로컬에서는 제대로 작동합니다.Linq SQL 구성 요소와 ASP.NET 웹 사이트를 배포하는 방법

그러나 배포하려고하면 컨텍스트 개체의 생성자를 호출 할 때 null 참조 예외가 발생합니다.

복잡성을 더하기 위해 웹 배포 프로젝트를 사용하여 단일 DLL로 컴파일합니다. 나는 Linq가 Sql에 대한 것들이 다른 것들과 함께 컴파일 될 것이라고 생각했다. 그러나 이제는 dbml 파일을 DLL과 함께 이동해야한다고 생각합니다.

App_Code 디렉토리에 dbml 파일이 있으므로 원격 서버에서 해당 디렉토리 구조를 다시 만들려고했습니다. 하지만. NET은 미리 컴파일 된 응용 프로그램에 App_Code 디렉토리를 갖게하지 않습니다. 그래서 방금 dbml 파일을 루트 디렉토리로 옮겼습니다.하지만 여전히 오류가 발생합니다.

도움말!

: 여기

내가지고있어 오류의 스택 추적의 [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 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath (VirtualPath virtualPath, 유형 requiredBaseType, HttpCont 확장 컨텍스트, 부울 allowCrossApp, 부울 noAssert)System.Web.UI.PageHandlerFactory.GetHandlerHelper (HttpContext 컨텍스트, String requestType, VirtualPath virtualPath, String physicalPath) +33 System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2 .GetHandler (HttpContext 컨텍스트, String requestType, VirtualPath virtualPath, String physicalPath) +40 System.Web.HttpApplication.MapHttpHandler (HttpContext 컨텍스트, String requestType, VirtualPath 경로, String pathTranslated, 부울 useAppConfig) +160 System.Web.MapHandlerExecutionStep. System.Web.HttpApplication.IExecutionStep.Execute() +93 (IExecutionStep 단계, 부울 & completedSynchronously) 155

DB_Interface.SarcStateDataDB는 컨텍스트 개체의 생성자를 호출하는 클래스입니다.

codeCS.SarcStateDataDataContext();

프로그램의 로컬 버전과 배포 된 버전 모두 동일한 원격 데이터베이스를 사용하기 때문에 연결 문자열이나 연결 개체를 보내지 않습니다. 그러나 그것이 문제 일 수 있습니까? 로컬 응용 프로그램은 dbml 파일의 연결 문자열에 액세스 할 수 있지만 배포 된 응용 프로그램은 그렇지 않습니다 ... ??

업데이트 : 내가 리플렉터의 코드를 쳐다 보면서 그것은의 Web.config에서 연결 문자열을 받고, 모든 것이 ...

답변

1

안녕 신시아 배포 할 필요가 없습니다를 그 문제에 copasetic 보인다 .dbml 파일. null 참조 예외는 .dbml이 없기 때문에 발생하지 않습니다. 제공된 정보로 문제를 추측하기는 어렵지만 먼저 생산 및 개발 데이터베이스의 데이터가 동일한 지 확인하십시오. 어쩌면 프로덕션 데이터베이스에 레코드가 없기 때문에 거기에서 null 참조를 얻을 수 있습니다.또한 VS Publishing Wizard (프로젝트에서 오른쪽 클릭 -> Publish)를 사용하여 프로젝트를 배포해야합니다. 또한 이것이 도움이되지 않으면 예외 스택 추적을 게시 할 수 있습니까? 감사합니다.

+0

THanks Davita - 내 게시물을 좀 더 자세한 정보로 업데이트했습니다. 개발 및 프로덕션 데이터베이스가 모두 같기 때문에 이것이 문제는 아니라고 생각합니다. – Cynthia

1

DB_Interface.SarcStateDataDB 클래스를 인스턴스화 할 때 사용할 연결 문자열을 전달한 다음 해당 코드를 codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();에 사용하는 것이 좋습니다.

그런 다음 응용 프로그램 수준에서 연결 문자열을 관리 할 수 ​​있습니다 (아마도 web.config 파일에서). 이렇게하면 prod와는 별도로 dev db를 사용하도록 전환 한 다음 별도의 연결 문자열로 쉽게 전환 할 수 있습니다.

2

확인을 클릭하면 문제가 발견되었습니다. 찾고 있던 연결 문자열 이름 (SarcWritingConnectionString)은 초기에 마법사를 통해 설정했을 때 Sql이 Linq에서 web.config에 추가 한 것입니다. 그리고 프로젝트를 배포 할 때 새 web.config를 서버로 이동하지 않았습니다. 변경되지 않았다고 생각했기 때문입니다. 내가 그것을 위로 움직일 때, 모든 것은 작동한다!

가 (. 내가 이미 Web.config의에 이미 연결 문자열 대신 서버 탐색기에서 설정 한 데이터 연결을 사용하여 - 내가 그 작업을 수행하는 방법도 확실하지 않았다)

감사합니다 당신의 도움을 위해서 - dbml 파일을 옮길 필요가 없다는 것을 알면 좋습니다. 다음 번에는 더 쉬울거야!