web-dev-qa-db-ja.com

基になる接続が閉じられました:接続が予期せず閉じられました

この例外は、SOAPリクエストの受信にほぼ3分かかり、サイズが2.25メガバイトである場合に、常にスローされます。

Webを精査しているときに、リクエストにヘッダーを設定することに関するすべての種類の投稿を見つけました。「Expect:」ヘッダーを送信しないようにしたい場合や、「Keep-Alive:」ヘッダーを送信したい場合もありますが、送信するヘッダーに関係なく、依然としてこの厄介なエラーが発生します。 「curl」を使用してまったく同じ要求を再作成でき、最終的に応答は何の問題もなく何の問題もなく返されますなので、ヘッダーを設定することが私の答えであるとは思いません。

ぼくの <httpRuntime maxRequestLength="409600" executionTimeout="900"/>

オプションが足りなくなったような気がします。誰かが何か支援を提供できるなら、私は最も感謝しています。注意すべき他のいくつかのことは、私がデータを要求しているサーバーが私の手の届かないところにあり、これらの要求はhttps経由であり、小さな応答を持つ他の要求は完璧に機能します。

ありがとう

16
Dave

投稿に.NET35のタグを付けましたが、WCFを使用していますか?

その場合、大規模なデータセットに使用するApp.configの例を次に示します。

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="32" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:1602/EndPoint.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding" contract="IEndPointContract" name="EndPoint" behaviorConfiguration="EndpointBehaviour" />     
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="EndpointBehaviour">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
11
Robert Wagner

この質問に答えるのが遅すぎないことを願っています。

コントラクトインターフェイスの定義に次の属性を追加してみてください。

[ServiceKnownType(typeof(ReturnClass))]

ポリモーフィッククラスを返すことができるより一般的なソリューションについては、この投稿を参照してください: http://www.goeleven.com/blog/entryDetail.aspx?entry=45

6

Edmxの代わりにdbmlを使用している場合、これが表示されます(基になる接続が閉じられました:接続が予期せず閉じられました)。 。

4
sharmaja

私は同じ問題を抱えており、詳細な調査の結果、この記事を見つけました。

Merrick Chafferのブログ

これはすべて、クライアントとサーバーの両方の「dataContractSerializer」の設定に関連していました。これがお役に立てば幸いです。

3
Ahmad Th

私のdatatransfereobjectsが再帰的に相互に参照しているため、このエラーが発生しました。

例えば:

顧客->(ある)->レーティングレーティング->(所属)->顧客

したがって、サイクルを削除する必要があります。

[DataContract]
public class Rating
{
    private Customer _customer;
    //[DataMember] // <-  EITHER HERE 
    public Customer Customer
    {
        get { return _customer; }
        set { _customer = value; }
    }
}


[DataContract]
public class Customer
{
    private long _customerID;
    [DataMember]
    public long CustomerID
    {
        get { return _customerID; }
        set { _customerID = value; }
    }

    [DataMember] // <- OR HERE
    public Rating Rating
    {
        get { return _rating; }
        set { _rating = value; }
    }
}
3
aatdark

私がこの解決策を見つけるまで、このエラーメッセージを取り除くためにいくつかの方法を試しました: http://kiranpatils.wordpress.com/2008/09/22/the-underlying-connection-was-closed-the-connection- was-closed-unexpectedly-while-returning-data-table-from-wcf-service /

List <>をDataSetに変更できます。 DataSetはList <>よりも大量のデータを処理できると思います。

それが役に立てば幸い。

3
SyntaxError

このブログ投稿 の提案を試しましたか?問題は、おそらく.NETのTCP/HTTPスタック実装にあります。

3
mkoeller

別のフィールドを追加しましたが、プロパティにセットがありませんでした。それが同じエラーの私の解決策でした。

[DataMember]
public bool HasValue
{
    get { return true; }
    set { }//adding this line made the solution.
}
2
Isaac

これは、内部エラーが発生した場合に発生する一般的なエラーです。

ここにトレースを追加してみてください: http://msdn.Microsoft.com/en-us/library/ms732023(v = vs.110).aspx

その後、完全なログが表示されます。

1
Justin Clarke

EFを使用するWCFの場合、次のコードをコンテキストクラスに追加するだけです。

base.Configuration.ProxyCreationEnabled = false;

0
Roath So