我們的服務器正在生產環境中運行,但運行幾天後,在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