2011-12-08 6 views
0

接続を開くときにC#コードに例外がスローされています。 Visual Studioは「接続が閉じられていません」という例外をスローします。接続の現在の状態は開いています。 '奇妙なことは、接続が全く開いていないということです。接続を開くときに例外がスローされるのはなぜですか?

奇妙なことは、問題が1台の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およびAzureツール(VS2010用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

関連する問題