2

.Net リモート処理を使用して構築されたアプリがあります。認証時に、エラーが発生した場合は、サーバーに例外をスローしました。例外はシリアライズ可能です。しかし、サーバーで例外がスローされると、クライアント側で「確立された接続がホスト マシンのソフトウェアによって中止されました」というエラーが表示されることがあります。

これは、サーバーをデバッグしようとしたときの windbg からのスタック トレースです。リモート処理フレームワークがそれを行っているようです。ソケットが閉じられている理由とこれを処理する方法についてのアイデアはありますか?

System.Net.Sockets.Socket.Close()
System.Runtime.Remoting.Channels.SocketHandler.Close()
System.Runtime.Remoting.Channels.SocketHandler.CloseOnFatalError(System.Exception)
System.Runtime.Remoting.Channels.SocketHandler.ProcessRequestNow()
System.Runtime.Remoting.Channels.RequestQueue.ProcessNextRequest(System.Runtime.Remoting.Channels.SocketHandler)
System.Runtime.Remoting.Channels.SocketHandler.BeginReadMessageCallback(System.IAsyncResult)
System.Net.LazyAsyncResult.Complete(IntPtr)
System.Net.ContextAwareResult.CompleteCallback(System.Object)
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
System.Net.ContextAwareResult.Complete(IntPtr)
System.Net.LazyAsyncResult.ProtectedInvokeCallback(System.Object, IntPtr)
System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
4

1 に答える 1

1

リモート処理例外がスローされるたびに、.Net リモート処理フレームワークがソケットを閉じるのは事実ですか? ケースに見えるWinDbgを使用したデバッグから。誰かがこれを確認できますか?また、特定のシナリオによっては、応答が送信された後にソケットが閉じられる場合と、応答が送信される前にソケットが閉じられる場合がありますか?

これは、「確立された接続がホスト マシンのソフトウェアによって中止されました」というメッセージが表示されないときの、クライアント側の windbg からのトレースです。この場合、リモート例外が発生します

06d2f45c 7c812aeb [HelperMethodFrame: 06d2f45c]
06d2f500 7a5ff43e System.Net.Sockets.Socket.Receive (バイト []、Int32、Int32、System.Net.Sockets.SocketFlags)
06d2f51c 67777fb0 System.Runtime.Remoting.Channels.SocketStream.Read(Byte[], Int32, Int32)
06d2f530 67777b12 System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(Byte[], Int32, Int32)
06d2f540 67777aea System.Runtime.Remoting.Channels.SocketHandler.BufferMoreData()
06d2f548 67777a7c System.Runtime.Remoting.Channels.SocketHandler.Read(Byte[], Int32, Int32)
06d2f56c 67777998 System.Runtime.Remoting.Channels.SocketHandler.ReadAndMatchFourBytes (Byte[])
06d2f578 67783199 System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation (UInt16 ByRef)
06d2f598 67783ece System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
06d2f5b4 67782456 System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage (System.Runtime.Remoting.Messaging.IMessage、System.Runtime.Remoting.Channels.ITransportHeaders、System.IO.Stream、System.Runtime.Remoting.Channels. ITransportHeaders ByRef、System.IO.Stream ByRef)
06d2f5d0 06e61bdf com.imageright.security.remoting.IdentityClientSink.ProcessMessage (System.Runtime.Remoting.Messaging.IMessage、System.Runtime.Remoting.Channels.ITransportHeaders、System.IO.Stream、System.Runtime.Remoting.Channels.ITransportHeaders ByRef 、System.IO.Stream ByRef)
06d2f5f0 6778ae69 System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage (System.Runtime.Remoting.Messaging.IMessage)
06d2f62c 793c319f System.Runtime.Remoting.Proxies.RemotingProxy.CallProcessMessage (System.Runtime.Remoting.Messaging.IMessageSink、System.Runtime.Remoting.Messaging.IMessage、System.Runtime.Remoting.Contexts.ArrayWithSize、System.Threading.Thread、 System.Runtime.Remoting.Contexts.Context, Boolean)
06d2f650 793c2f82 System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke (System.Runtime.Remoting.Messaging.IMethodCallMessage、ブール値、Int32)
06d2f6b4 793c2db9 System.Runtime.Remoting.Proxies.RemotingProxy.Invoke (System.Runtime.Remoting.Messaging.IMessage)
06d2f6c4 79374dc3 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)
06d2f960 79f98b43 [TPMethodFrame: 06d2f960] com.imageright.server.IInstrumentation.GetEnterpriseID()
06d2f970 06e618ee imageright.proxies_com.imageright.server.IInstrumentationProxy.GetEnterpriseID()
06d2f9c4 069fddae ImageRight.EMC.EnterpriseNode.EstablishConnection()
06d2fa00 069fdce7 ImageRight.EMC.RootNode.TryOpenConnections (システム オブジェクト)
06d2fa38 79407caa System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(System.Object)
06d2fa3c 79373ecd System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext、System.Threading.ContextCallback、System.Object)
06d2fa54 79407e18 System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal (System.Threading._ThreadPoolWaitCallback)
06d2fa68 79407d90 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(System.Object)
06d2fbf8 79e7c74b [GCFrame: 06d2fbf8]

これは、「確立された接続がホスト マシンのソフトウェアによって中止されました」というエラーが発生したときのトレースです。この場合、ソケットエラーが発生します。

06d2f45c 7c812aeb [HelperMethodFrame: 06d2f45c]
06d2f500 7a5ff43e System.Net.Sockets.Socket.Receive (バイト []、Int32、Int32、System.Net.Sockets.SocketFlags)
06d2f51c 67777fb0 System.Runtime.Remoting.Channels.SocketStream.Read(Byte[], Int32, Int32)
06d2f530 67777b12 System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(Byte[], Int32, Int32)
06d2f540 67777aea System.Runtime.Remoting.Channels.SocketHandler.BufferMoreData()
06d2f548 67777a7c System.Runtime.Remoting.Channels.SocketHandler.Read(Byte[], Int32, Int32)
06d2f56c 67777998 System.Runtime.Remoting.Channels.SocketHandler.ReadAndMatchFourBytes (Byte[])
06d2f578 67783199 System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation (UInt16 ByRef)
06d2f598 67783ece System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
06d2f5b4 67782456 System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage (System.Runtime.Remoting.Messaging.IMessage、System.Runtime.Remoting.Channels.ITransportHeaders、System.IO.Stream、System.Runtime.Remoting.Channels. ITransportHeaders ByRef、System.IO.Stream ByRef)
06d2f5d0 06e61bdf com.imageright.security.remoting.IdentityClientSink.ProcessMessage (System.Runtime.Remoting.Messaging.IMessage、System.Runtime.Remoting.Channels.ITransportHeaders、System.IO.Stream、System.Runtime.Remoting.Channels.ITransportHeaders ByRef 、System.IO.Stream ByRef)
06d2f5f0 6778ae69 System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage (System.Runtime.Remoting.Messaging.IMessage)
06d2f62c 793c319f System.Runtime.Remoting.Proxies.RemotingProxy.CallProcessMessage (System.Runtime.Remoting.Messaging.IMessageSink、System.Runtime.Remoting.Messaging.IMessage、System.Runtime.Remoting.Contexts.ArrayWithSize、System.Threading.Thread、 System.Runtime.Remoting.Contexts.Context, Boolean)
06d2f650 793c2f82 System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke (System.Runtime.Remoting.Messaging.IMethodCallMessage、ブール値、Int32)
06d2f6b4 793c2db9 System.Runtime.Remoting.Proxies.RemotingProxy.Invoke (System.Runtime.Remoting.Messaging.IMessage)
06d2f6c4 79374dc3 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)
06d2f960 79f98b43 [TPMethodFrame: 06d2f960] com.imageright.server.IInstrumentation.GetEnterpriseID()
06d2f970 06e618ee imageright.proxies_com.imageright.server.IInstrumentationProxy.GetEnterpriseID()
06d2f9c4 069fddae ImageRight.EMC.EnterpriseNode.EstablishConnection()
06d2fa00 069fdce7 ImageRight.EMC.RootNode.TryOpenConnections (システム オブジェクト)
06d2fa38 79407caa System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(System.Object)
06d2fa3c 79373ecd System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext、System.Threading.ContextCallback、System.Object)
06d2fa54 79407e18 System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal (System.Threading._ThreadPoolWaitCallback)
06d2fa68 79407d90 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(System.Object)
06d2fbf8 79e7c74b [GCFrame: 06d2fbf8].

サーバーで例外をスローしているのは、セキュリティを処理するカスタム シンクです。コードを 1 か所で簡単に投稿できたはずです。

于 2008-09-23T20:34:30.250 に答える