我们的服务器正在生产环境中运行,但运行几天后,在WCF调用时会发生内存不足异常。内存不足在WCF调用时出现异常
Line 36007: GlobalUnhandledException: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
Line 36063: at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(SocketError socketError, Int32 bytesTransferred, SocketFlags flags)
Line 36063: at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(SocketError socketError, Int32 bytesTransferred, SocketFlags flags)
Line 36064: at System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
Line 36065: at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
我们尝试给出配置中的最大数组大小。在服务器端绑定WCF的配置。
<netTcpBinding>
<binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="524288" sendTimeout="00:00:35" transactionFlow="true" >
<reliableSession enabled="true" />
<security mode="None" />
</binding>
</netTcpBinding>
在WCF连接调用中是否发生内存泄漏问题?
服务行为:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,
ConcurrencyMode = ConcurrencyMode.Multiple,
ReleaseServiceInstanceOnTransactionComplete = false)]
有什么我配置过程中错过了,有什么措施来纠正或识别该内存溢出异常在这个问题上的任何帮助表示赞赏。
UPDATE: 经营合同:
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
我有transactionFlow一个操作合同被允许并根据MSDN文档https://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.releaseserviceinstanceontransactioncomplete(v=vs.110).aspx 如果OperationBehaviorAttribute.TransactionScopeRequired设置为true,那么您必须显式将ReleaseServiceInstanceOnTransactionComplete设置为false – MKMohanty
如果您发布该信息,这将有所帮助。如果没有适当的'OperationContract'方法定义来支持你的问题,那么使用该配置会导致内存泄漏,因为每次调用之后你都不会查杀服务实例。我仍然从这些方法开始,以确保服务实例正确关闭。 – toadflakz
我更新了问题,我没有得到最后一行,服务实例正在正确关闭,如何实现这一目标?你的意思是我不应该使用transactionflowoption.Allowed。 – MKMohanty