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:
好吧,这就是发生的事情 - 你有一个有故障的网卡,几个小时后就会过热,当这种情况发生时,它开始短路,结果你的客户端“认为”服务器已关闭。故事结束——100%确定。我的赏金在哪里?
顺便说一句:它过热要么是由于设计不良造成的,特别是如果您使用笔记本电脑,要么是由于笔记本电脑已经存在损坏。
归档时间: |
|
查看次数: |
6024 次 |
最近记录: |