客户端CommunicationException,而服务正常工作

use*_*257 16 .net c# asp.net wcf exception

目前我正面临一个我不明白的问题.我有一个wcf客户端,它同时通过几个线程调用wcf服务(两者都在同一台机器上).有时,我会遇到众所周知的System.ServiceModel.CommunicationException

"收到对xxx的HTTP响应时发生错误.这可能是由于服务端点绑定不使用HTTP协议.这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭) ).有关详细信息,请参阅服务器日志." ,

有时它有效.如果服务调用成功,它似乎是完全随机的.

请求非常小,只是一个(int,bool,enum)调用.该请求包含ca. 来自MSSQL数据库的300-500 KB记录.

我在网站上搜索了数百个解决方案,增加了超时值,缓冲区值,客户端和服务端的请求和响应大小值.我添加了[DataContract]和[DataMember]属性,因为它们丢失了.而且仍然没有变化.

我激活了完整的跟踪,只是为了看到一个非常奇怪的行为:

来自客户端的调用在本地停止并带有给定的异常 - 但是服务器处理它们并发送一个永远不会到达客户端的响应.检查给定跟踪的时间 - 客户端中止,服务器继续.

在跟踪中,我看到了这个图中的重量:

在此输入图像描述

请,任何人都可以帮助阻止这种无休止的搜索?

更新1:

我上传了客户端服务器配置,也许这​​有帮助.

更新2:

我们包含了ConnectionLimit(connection = 80)的config参数,正如Yahia所建议的那样.目前,似乎这解决了这个问题,但我们仍然试图重现错误.

更新3:

该死的.三个小时后,我再次看到相同的行为......我们有另一个建议:正如你所看到的,我们在客户端使用quartz.net,从20个线程开始.石英发动机执行的工作连接到我们的服务.现在我试着想象如果7个线程试图同时连接服务会发生什么.

更新4:

我们在注册表和配置中设置了tcp参数.重启后,没有任何变化:(

这些是注册表的变化:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters - TcpNumConnections = 65534
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters - MaxUserPort = 65534
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings - MaxConnectionsPer1_0Server = 20
HKLM\Software\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_MAXCONNECTIONSPERSERVER - iexplore.exe = 20
HKLM\Software\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_MAXCONNECTIONSPERSERVER - MyClientsExeName.exe = 20

更新5:

客户跟踪 服务器跟踪

更新6:

[DataContract]
public class Currency
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Code { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public ForeignNoteDetails ForeignNoteDetails { get; set; }

    [DataMember]
    public CurrencyRates Rates { get; set; }

    [DataMember]
    public PreciousMetallDetails PreciousMetallDetails { get; set; }

    [DataMember]
    public CurrencyType Type { get; set; }
}

[DataContract]
public class ForeignNoteDetails
{
    [DataMember]
    public double CardholderBillingCurrencyCode { get; set; }

    [DataMember]
    public string Country { get; set; }

    [DataMember]
    public string CountryCode { get; set; }

    [DataMember]
    public int CurrencyUnit { get; set; }

    [DataMember]
    public List<string> Notes { get; set; }
}

[DataContract]
public class CurrencyRates
{
    [DataMember]
    public ExchangeRate PurchaseRate { get; set; }

    [DataMember]
    public ExchangeRate SellRate { get; set; }
}

[DataContract]
public class PreciousMetallDetails
{
    [DataMember]
    public string PreciousMetalType { get; set; }

    [DataMember]
    public double Fineness { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

致电服务:

        protected IEnumerable<Currency> GetCurrencyLevel(int id, bool netRate = true, RatesCalculationSource ratesSource = RatesCalculationSource.ReutersRates)
    {
        return this.calculationClient.GetCurrencyLevel(new RatesCalculationSetting() { CalculationLevelId = id, CalculateGrossRates = !netRate, Soruce = ratesSource });
    }
Run Code Online (Sandbox Code Playgroud)

客户创建:

protected ICalculationServiceClientService calculationClient = IoC.DependencyManager.Resolve<ICalculationServiceClientService>();
Run Code Online (Sandbox Code Playgroud)

另一个对服务的呼叫(工作):

this.calculationClient.DistributeTradingOfficeRatesLevels(branchOfficeLevelId, tradingLevelId);
Run Code Online (Sandbox Code Playgroud)

这被定义为

void DistributeTradingOfficeRatesLevels(int branchOfficeRatesLevelId, int tradingOfficeRatesLevelId)
Run Code Online (Sandbox Code Playgroud)

更新7:

例外细节

G.Y*_*G.Y 4

好吧,这就是发生的事情 - 你有一个有故障的网卡,几个小时后就会过热,当这种情况发生时,它开始短路,结果你的客户端“认为”服务器已关闭。故事结束——100%确定。我的赏金在哪里?

顺便说一句:它过热要么是由于设计不良造成的,特别是如果您使用笔记本电脑,要么是由于笔记本电脑已经存在损坏。