Мы наблюдаем очень необычное поведение при вызове службы WCF. Проблема в том, что иногда это работает, а затем иногда мы получаем следующую ошибку (все внутренние исключения вместе взятые):
Произошла ошибка при отправке HTTP-запроса к. Это может быть связано с тем, что сертификат сервера неправильно настроен с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.
Базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.
Невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным хостом.
Существующее соединение было принудительно закрыто удаленным хостом
Мы выяснили следующий случай: Сервисный вызов работает нормально при повторении его несколько раз с интервалом в 1 секунду. Затем после ожидания в течение 2-3 минут возникает исключение, которое продолжает возникать долгое время (мы этого не определили). После того, как он заработает, всю процедуру можно повторить, чтобы снова получить исключение.
Это происходит только тогда, когда мы подключаемся через брандмауэр компании. Если мы подключаемся напрямую к серверу, все работает должным образом.
Все происходит только при вызове функции SaveBathroom, остальные функции работают нормально. Мы подозреваем, что это может быть из-за большого размера сообщения.
//Function on the server that fails *sometimes*
public ConfigurationSaveStatus SaveBathroom(BathroomConfiguration bathroom);
//Function that never fails
public UpdateInfo[] GetUpdates(string xml, string langauge, System.DateTime lastUpdateCheckDate);
//Interface:
public enum ConfigurationSaveStatus {...}
public class BathroomConfiguration
{
public string BathroomNumber { get; set; }
public DateTime ConfigurationDate { get; set; }
public Version ClientVersion { get; set; }
public bool ScenarioReady { get; set; }
public bool ScenarioActivated { get; set; }
public string LicenseXml { get; set; }
public byte[] ConfigurationReportPdf { get; set; }
public string Configuration { get; set; }
public string eToolMac { get; set; }
}
public class UpdateInfo
{
public int Id { get; set; }
public string Version { get; set; }
public string Category { get; set; }
public string SubCategory { get; set; }
public int Priority { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string FileLocation { get; set; }
public long FileSize { get; set; }
public DateTime ValidFrom { get; set; }
public DateTime? ValidTo { get; set; }
}
//config
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IeAssistService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IeAssistService"
contract="IeAssistService" name="BasicHttpBinding_IeAssistService" />
</client>
</system.serviceModel>
</configuration>