Подтвердить что ты не робот

Подключенное соединение было закрыто: соединение неожиданно закрылось

Это исключение постоянно выбрасывается на запрос SOAP, который занимает почти три минуты для получения и имеет размер 2,25 мегабайта.

При очистке сети я нахожу всевозможные сообщения, которые, похоже, касаются настройки заголовков в запросе, некоторые хотят, чтобы я не отправлял заголовок "Ожидание:", некоторые хотят, чтобы я отправил "Keep-Alive:" заголовок, но независимо от заголовков, которые я отправляю, я все еще получаю эту неприятную ошибку. Я не считаю, что настройка заголовков - это мой ответ, потому что я могу воссоздать тот же запрос, используя "завиток", и ответ в конечном итоге возвращается без проблем, что-то никогда.

Мой <httpRuntime maxRequestLength="409600" executionTimeout="900"/>.

Мне кажется, что у меня заканчиваются варианты. Если кто-нибудь сможет оказать любую помощь, я буду очень благодарен. Несколько других вещей, которые следует отметить, это то, что сервер, на который я запрашиваю данные, находится вне моих рук, также эти запросы превышают https, а другие запросы с меньшими ответами работают безупречно.

Спасибо

4b9b3361

Ответ 1

Вы отметили сообщение как .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>

Ответ 2

Надеюсь, что не поздно ответить на этот вопрос.

Попробуйте добавить следующий атрибут в определение вашего контрактного интерфейса:

[ServiceKnownType(typeof(ReturnClass))]

Для более общего решения, которое позволяет возвращать полиморфные классы, пожалуйста, обратитесь к этому сообщению: http://www.goeleven.com/blog/entryDetail.aspx?entry=45

Ответ 3

Если вы используете dbml вместо edmx, вы получите это (базовое соединение было закрыто: соединение было неожиданно закрыто), поскольку dbml не будет возвращать сериализуемые данные, для которых требуется datacontract, перейдите к свойствам файла dbml и измените Сериализацию режим к однонаправленному.

Ответ 4

Вы пробовали sugestion этот пост в блоге? Проблема, скорее всего, будет заключаться в реализации стека TCP/HTTP.NET.

Ответ 5

У меня такая же проблема, и после глубоких исследований я нашел эту статью:

Блог Меррика Чаффера

Все это связано с установкой "dataContractSerializer" для клиента и сервера. Надеюсь, это будет полезно.

Ответ 6

Я получил эту ошибку, потому что мои datatransfereobject ссылаются друг на друга рекурсивным образом.

Например:

Клиент- > (есть) → Рейтинг Рейтинг- > (принадлежит) → Клиент

поэтому вам нужно удалить циклы.

[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; }
    }
}

Ответ 7

Пробовал несколько способов избавиться от этого сообщения об ошибке, пока не нашел это решение: http://kiranpatils.wordpress.com/2008/09/22/the-underlying-connection-was-closed-the-connection-was-closed-unexpectedly-while-returning-data-table-from-wcf-service/

Вы можете изменить свой список < > на DataSet. Я подозреваю, что DataSet может обрабатывать большое количество данных, чем List < > .

Надеюсь, что это поможет.

Ответ 8

Я добавил другое поле, но не имел набора свойств. Это было мое решение для той же ошибки.

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

Ответ 9

Это общая ошибка, возникающая при наличии внутренней ошибки.

Попробуйте добавить трассировку здесь: http://msdn.microsoft.com/en-us/library/ms732023(v=vs.110).aspx

Затем вы увидите полный журнал.

Ответ 10

Для WCF с EF просто добавьте следующий код в класс контекста.

base.Configuration.ProxyCreationEnabled = false;