2011-12-08 2 views
0

연결을 열 때 C# 코드에 예외가 발생했습니다. Visual Studio에서 '연결이 닫혀 있지 않습니다.'라는 예외가 발생합니다. 연결의 현재 상태가 열려 있습니다. '. 이상한 점은 연결이 전혀 열려 있지 않다는 것입니다.연결을 열려고 할 때 예외가 throw되는 이유는 무엇입니까?

이상한 점은 한 PC (PC-1)에서만 문제가 발생한다는 것입니다. 다른 2 대의 PC (PC-2 및 PC-3)에서는 예외가 발생하지 않고 코드가 컴파일되어 2 대의 다른 PC에서 정상적으로 실행됩니다. PC-2 또는 PC-3에서 Azure로 배포하면 모든 것이 작동합니다.

모든 3 대의 PC에는 Visual Studio 2010 SP1 (10.0.40219.1 SP1Rel), .NET (4.0.30319 SP1Rel), Azure 1.6 SDK, Azure Ap Fabric 1.5.37 및 VS2010 용 Azure 도구 (1.6.41103.1601 코드를 얻기 위해, 문제가있는 PC에

System.InvalidOperationException was unhandled by user code 
Message=The connection was not closed. The connection's current state is open. 
Source=System.Data 
StackTrace: 
    at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at myPost.Models.Repository.Foo(Int64 rId, Int64 mItemId) in C:\code\Models\Repository.cs:line 326 
    at myPost.Models.Repository.Foo(Int64 menuItemId, Int64 rId, mItemRatings[]& ratings, Photos[]& thumbnails) in C:\code\Models\Repository.cs:line 92 
    at myPost.Controllers.HomeController.Index(String part1, String part2, String embed) in C:\code\Controllers\HomeController.cs:line 97 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
InnerException: 

(PC-1) : 여기

private long[] Foo(long rId, long mItemId) 
    { 
     List<long> list = null; 

     using (myDBEntities ctx = new myDBEntities()) 
     { 
      EntityConnection entityConnection = (EntityConnection)ctx.Connection; 

      using (DbConnection connection = entityConnection.StoreConnection) 
      { 
       connection.Open(); 
       ... 

전체 예외 사항입니다 :)

여기에 코드의 관련 부분 달리기, 나는 connection.Open(); 바로 앞에 connection.Close();을 추가하십시오. 그러나 PC-2 및 PC-3에서는이 문제가 발생하며 Azure에 배포 할 때 예외가 발생합니다. connection.Close()을 추가 할 필요가 없기 때문에 예외가 발생합니다.

PC-1의 설정이 코드 문제가 아닌 구성 문제처럼 보이므로 잘 모르겠습니다.

+0

코드를 실행하기 전에 첫 번째 PC에서 SQL Server MS의 Azure 인스턴스에 연결 했습니까? – Lloyd

+0

아니요. 내가 가지고있는 Azure와의 유일한 연결은이 프로젝트에서 온 것입니다. 그것은 내가 실행중인 유일한 코드입니다. – TMC

+0

동일한 문제가 발생할 수있는 VS 데이터베이스 마법사에서 연결 문자열을 만들었습니까? VS 내에서뿐만 아니라 로컬에서 응용 프로그램을 빌드하고 배포하는 경우에도 동일한 문제가 발생합니까? – Lloyd

답변

0

동의하지 않으면 코드 문제가 아닐 수 있습니다. 계속하기 전에 연결이 열려 있는지 또는 닫혀 있는지에 대한 빠른 테스트를 수행하십시오. 어쨌든 그렇게하는 것이 가장 좋습니다. 뭔가 같이 :

if (connection.State == System.Data.ConnectionState.Open) 
{ 
    // ahoy, mate! 
} 
else 
{ 
    connection.Open(); 
    // here be dragons 
} 

나는 모든 기계의 유령을 찾는 것에 대해 해요,하지만 경우에 따라서는 상태 검사를 수행하고 삶에 이동 다만 쉽다.

+0

나는 이것을 할 수 있었지만 그 과정에서 더러워졌다. 나는 정말 "유령"을 제거하고 싶습니다! – TMC

관련 문제