1

基盤となるトランスポート層として TCP を使用して、クライアントからのリモート呼び出しを受け入れるサーバーで構成されるシステムがあります。通常は魅力のように機能しますが、いいえを増やすと。クライアントの場合、サーバーはランダムに起動して、呼び出しの途中で TCP 接続を閉じます。すべての通話がこの方法で中断されるわけではありません。

これは本当に予期しない動作です...サーバー側では例外は発生せず、クライアント側の例外のみが発生します。

System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Server stack trace: 
   ved System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   ved System.Runtime.Remoting.Channels.SocketStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   ved System.Runtime.Remoting.Channels.SocketHandler.ReadFromSocket(Byte[] buffer, Int32 offset, Int32 count)
   ved System.Runtime.Remoting.Channels.SocketHandler.Read(Byte[] buffer, Int32 offset, Int32 count)
   ved System.Runtime.Remoting.Channels.SocketHandler.ReadAndMatchFourBytes(Byte[] buffer)
   ved System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadAndMatchPreamble()
   ved System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(UInt16& operation)
   ved System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
   ved System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   ved System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
   ved System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   ved System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   ved EBH.GuG.AgentKit.Transports.RemotingAgentHostEndPoint.SyncInvoke(Agent a, Int32 port)
4

2 に答える 2

0

Windows XP/2000/98 で実行していますか?

その場合、XP には 10 個のアウトバウンド ソケットのスロットリング メカニズムが組み込まれています (デスクトップ マシンをサーバーとして使用して、Windows Server の料金を強制的に支払わないようにするためです)。

追加:

おそらく、作業の実行中に開いているソケットを維持しないように、コールバックを使用して呼び出しを再構築できます。これにより、同時スループットが向上するはずです。

于 2009-01-27T09:50:49.490 に答える