調用WCF服務時,我們遇到非常不尋常的行爲。問題是,有時它工作,然後有時我們得到以下錯誤(所有內部異常的組合):同時使HTTP請求發生隨機「現有連接被遠程主機強制關閉」
錯誤。這可能是由於在HTTPS情況下服務器證書未使用HTTP.SYS正確配置。這也可能是由於客戶端和服務器之間的安全綁定不匹配造成的。
底層連接已關閉:發送時發生意外錯誤。
無法將數據寫入傳輸連接:現有連接被遠程主機強制關閉。
一個現有的連接被強行遠程主機
我們發現了以下情況下關閉:在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>
當異常開始時,請嘗試在服務器上使用iisreset。所有請求是否仍然失敗,或者其中一些請求再次開始工作,然後在一段時間請求再次開始失敗之後? – 2014-09-02 10:50:21
我們發現這是一個防火牆問題。該請求根本沒有到達該服務。 – 2014-09-02 13:07:23