2011-11-08 13 views
0

私はEntity Framework 4.1のコードの最初の手法でデータベースとしてSQL Azureを使用しています。Entityフレームワーク4.1でLinqの "Include"メソッドを使用しているときにエラーが発生しました.Bug?

:私はEFでリレーショナルシナリオは、私はいくつかの可能性とCを含むなど、Bを取得しようとしましたので、いつものように A->B->Cある

3.中間層としてWCFからEFにアクセスし、ASP.NET MVCにサービス参照を提供しています
db.A.Include("B").Include("B.C") 
db.A.Include("B").Include("C") 

しかし、サービス自体が完璧に動作しています。 Webアプリケーションに参照を追加してから、シリアライズを試み、以下の例外をスローします。私は成功もなく真の偽の遅延読み込みをしようとしました。

"The underlying connection was closed: The connection was closed unexpectedly" 
Stack Trace found: 
at System.Net.HttpWebRequest.GetResponse() at 
System.ServiceModel.Channels.HttpChannelFactory. 
    HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 

解決するためにthis pageにアクセスし、推奨される属性をweb.configに追加しました。今、私は突然、エラーを取得しています:

The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error

私はそれは、クライアントとサービスweb.configsでいくつかのタグ/ atrributeのミスマッチの問題かもしれないが、すべてがすぐそこにあると思いました。 wcfサービスからWebアプリケーションへのcllectionプロパティ全体の読み込みでオブジェクトリストを渡すことができなかったことの1つは、非常に重くてパフォーマンスが低いことです。前述のアーキテクチャのWebアプリケーションでロードされたリストを取得するために、上記の問題にまだ直面しています。いくつかの身体はここで助けることができます....

+0

推測ですか? –

+0

エラーメッセージの表示はどうですか? –

+0

ねえ、ありがとう...私はエラーメッセージで私の質問を編集しました。 –

答えて

2

ちょっとおかげカークブロードハースト 、これにより、私は問題を追跡することができます。その周りを探索する。私は解決策を得た。私はちょうど私のプロジェクトで

public class ReferencePreservingDataContractFormatAttribute : Attribute, IOperationBehavior 
     { 
      #region IOperationBehavior Members 
      public void AddBindingParameters(OperationDescription description, BindingParameterCollection parameters) 
      { 
      } 

      public void ApplyClientBehavior(OperationDescription description, System.ServiceModel.Dispatcher.ClientOperation proxy) 
      { 
       IOperationBehavior innerBehavior = new ReferencePreservingDataContractSerializerOperationBehavior(description); 
       innerBehavior.ApplyClientBehavior(description, proxy); 
      } 

      public void ApplyDispatchBehavior(OperationDescription description, System.ServiceModel.Dispatcher.DispatchOperation dispatch) 
      { 
       IOperationBehavior innerBehavior = new ReferencePreservingDataContractSerializerOperationBehavior(description); 
       innerBehavior.ApplyDispatchBehavior(description, dispatch); 
      } 


      public void Validate(OperationDescription description) 
      { 
      } 
      #endregion 
     } 

     class ReferencePreservingDataContractSerializerOperationBehavior : DataContractSerializerOperationBehavior 
     { 
      public ReferencePreservingDataContractSerializerOperationBehavior(OperationDescription operationDescription) : base(operationDescription) { } 
      public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes) 
      { 
       return CreateDataContractSerializer(type, name, ns, knownTypes); 
      } 

      private static XmlObjectSerializer CreateDataContractSerializer(Type type, string name, string ns, IList<Type> knownTypes) 
      { 
       return CreateDataContractSerializer(type, name, ns, knownTypes); 
      } 

      public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes) 
      { 
       return new DataContractSerializer(type, name, ns, knownTypes, 
       0x7FFF /*maxItemsInObjectGraph*/, 
       true/*ignoreExtensionDataObject*/, 
       true/*preserveObjectReferences*/, 
       null/*dataContractSurrogate*/); 
      } 
     } 
    } 

して、コメントを追加し、このクラスを追加しました:[ReferencePreservingDataContractFormat]を私は「含める」を使用していたメソッド定義を持つ属性として。それは私のために働いた。 これは他の貧しい人々に役立つかもしれません。

0

これは非常に一般的なWCFの例外であり、いくつでもありえます。この問題のためにStackOverflowに数百のヒットがあります。

https://stackoverflow.com/search?q=%22The+underlying+connection+was+closed%22

あなたは、WCFに新しいていますか?サービスコールは機能しますか? maxMessageSizeを超過するほどシンプルなものになる可能性があります。

私はあなたのサービスにログを実装することをお勧めします - いくつかの診断タグを設定ファイルに追加してください。

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\log\Traces.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
関連する問題