调用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 :(得分:0)
这个有点棘手。
首先我们发现防火墙阻止了请求。 Microsoft Forefront威胁管理网关使用证书登录回退到用户名/密码登录。
客户端使用的是用户名/密码凭据。似乎TMG上存在一个带有大消息和这种配置的错误,因此TMG自己关闭了连接。有时。并且在一段时间内拒绝了相同类型的新连接。
我们一旦禁用证书登录,一切都很好。