2014-09-02 172 views
0

調用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> 
+0

當異常開始時,請嘗試在服務器上使用iisreset。所有請求是否仍然失敗,或者其中一些請求再次開始工作,然後在一段時間請求再次開始失敗之後? – 2014-09-02 10:50:21

+0

我們發現這是一個防火牆問題。該請求根本沒有到達該服務。 – 2014-09-02 13:07:23

回答

0

這一個有點棘手。

首先我們發現防火牆阻止了請求。 Microsoft Forefront威脅管理網關使用證書登錄與回退到用戶名/密碼登錄。

客戶端正在使用用戶名/密碼憑據。 TMG似乎有一個大消息和這種配置的錯誤,因此TMG自己關閉了連接。有時。並且在一段時間內拒絕同一類型的新連接。

只要我們禁用證書登錄,一切都很好。

相關問題