WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

摘要:
背景:WindowsService+WCF+NetTcpBinding之前一直使用http协议模式,改为net.tcp之后隔段时间出现:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。

背景:WindowsService + WCF + NetTcpBinding

之前一直使用http协议模式,改为net.tcp之后隔段时间出现:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。 127.0.0.1:9000

WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作第1张WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作第2张
记录时间:2016-01-14 10:02:58日志级别:Exception
日志位置:CloudTraPlatSOA.Abstract.AbInSideSMS
当 前 行: 85方法名称: SendMessageInfo
日志描述:发送到[185*******]短信失败,内容:高兴的通知您:已经成功办理 [ 基础会员 ] ,会员到期时间:2017-01-14Ex.Message: Unable to connect to the remote server
InnerException.Message: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。 127.0.0.1:9000Message.StackTrace:    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress&address, ConnectSocketState state, 

IAsyncResult asyncResult, Int32 timeout, Exception&exception)
堆栈跟踪:
   at SyncInvokeWebSendMessage(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
   at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext)
   at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext)
   at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)
   at System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)
   at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
   at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
   at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously, Exception exception)
   at System.ServiceModel.Channels.FramingDuplexSessionChannel.TryReceiveAsyncResult.OnReceive(IAsyncResult result)
   at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
   at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
   at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously, Exception exception)
   at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object state)
   at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state)
   at System.ServiceModel.Channels.SocketConnection.FinishRead()
   at System.ServiceModel.Channels.SocketConnection.AsyncReadCallback(Boolean haveResult, Int32 error, Int32 bytesRead)
   at System.ServiceModel.Channels.OverlappedContext.CompleteCallback(UInt32 error, UInt32 numBytes, NativeOverlapped*nativeOverlapped)
   at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped*nativeOverlapped)
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
异常日志

原因:

tcp的端口请求已经达到本地设置的界限(MaxUserPort)
解决方式

修改两个注册表:

1. HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParametersMaxUserPort

  如果没有,则手动创建 DWord(32位) ”数值数据“改为十进制65534 或者认为适当的值。此值表示 用户最大使用的端口数量,默认为5000。

2. HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParametersTCPTimedWaitDelay

  如果没有,则手动创建 DWord(32位) ”数值数据“改为十进制30 或者你认为适当的值。此值表示一个关闭后的端口等待多久之后可以重新使用,默认为120秒,也就是2分钟    才可以重新使用。

退出注册表编辑器,然后重新启动计算机

WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作第3张

MaxUserPort在MSDN的描述:https://technet.microsoft.com/zh-cn/library/cc938196.aspx

MaxUserPort

  • 描述:确定当应用程序向系统请求获取可用的用户端口时,TCP/IP 可指定的最高端口号。
  • 如何查看或设置:

1.使用regedit命令,访问 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTCPIPParameters 注册表子键,然后创建新的 REG_DWORD 值MaxUserPort。

2.将此值至少设置为十进制32768。

3.停止并重新启动系统。

    • 缺省值:
    • 建议值:至少为十进制32768。
  • 建议将MaxUserPort值设置为60000(十六进制ea60。如果设置的MaxUserPort值低于60000,可能会显示名称服务提供程序接口 (NSPI) 代理警告,例如事件 9040。

TcpTimedWaitDelay

    • 描述:确定 TCP/IP 在释放已关闭的连接并再次使用其资源前必须经过的时间。关闭与释放之间的这段时间称为 TIME_WAIT 状态或者两倍最大段生存期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。通过减少此条目的值,TCP/IP 可以更快地释放关闭的连接,并为新连接提供更多资源。如果运行中的应用程序要求快速释放连接或创建新连接,或者由于多个连接处于 TIME_WAIT 状态而导致吞吐量较低,请调整此参数。
    • 如何查看或设置:

1.使用regedit命令,访问 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTCPIPParameters 注册表子键,然后创建新的 REG_DWORD 值TcpTimedWaitDelay。

2.将此值设置为十进制30,即十六进制 0x0000001e。此值将等待时间设置为 30 秒。

3.停止并重新启动系统。

    • 缺省值:0xF0,此值将等待时间设置为 240 秒(4 分钟)。
    • 建议值:最小值为0x1E,此值将等待时间设置为 30 秒。

免责声明:文章转载自《WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇React-Native 之 ScrollView介绍和使用h5页面利用canvas压缩图片并上传下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Asp.Net 之 基本控件FileUpload上传控件

1、前台代码: <asp:FileUpload ID="FileUpload" runat="server" /> <asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" /> <asp:Label ID="LabMsg" runat...

UGUI_屏幕适配

引用:http://www.xuanyusong.com/archives/3278#comments   1.可以选择的有三种: 1.Screen Space – overlay  此模式不需要UI摄像机,UI将永远出现在所有摄像机的最前面。我觉得overlay有问题,如果我想在UI前面放个东西就不行了,因为可能在UI前面放一个特效或者UI啥的。。 2....

从网页抓取数据的一般方法

首先要了解对方网页的运行机制 ,这可以用httpwacth或者httplook来看一下http发送和接收的数据。这两个工具应该说是比较简单易懂的。这里就不再介绍了。主要关注的内容是header和post的内容。一般会包括cookie,Referer页面和其他一些乱其八糟可能看不懂的变量,还有就是正常交互的参数,比如需要post或者get的querystri...

C# 获取枚举 Enum 变量值的 Description 属性

在C#中如何读取枚举值的描述属性? 在C#中,有时候我们需要读取枚举值的描述属性,也就是说这个枚举值代表了什么意思。比如本文中枚举值 Chinese ,我们希望知道它代表意思的说明(即“中文”)。 有下面的枚举: 1 2 3 4 5 6 public enum EnumLanugage {     [System.ComponentMode...

Combobox 控件绑定数据

ComboBox 类:表示带有下拉列表的选择控件,通过单击控件上的箭头可显示或隐藏下拉列表。 绑定集合对象// .xaml using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;...

webapi-1 给现有MVC 项目添加 WebAPI

1. 增加一个WebApi Controller, VS 会自动添加相关的引用,主要有System.Web.Http,System.Web.Http.WebHost,System.Net.Http 2. 在App_Start 下创建 WebApiConfig.cs 并注册路由 using System; using System.Collections...