Tôi có ứng dụng được phân phối sử dụng .NET Remoting trên mạng gigabit trong nhà. Có một máy chủ duy nhất và hơn một chục máy khách kết nối với máy chủ. Các máy khách chạy nhiều luồng và có thể có tối đa 10 yêu cầu đồng thời từ mỗi máy khách.Nguyên nhân gây ra "vi phạm giao thức kênh Tcp mong đợi phần mở đầu" trong .NET Remoting?
Ứng dụng này hoạt động rất tốt hầu hết thời gian. Máy chủ luôn hoạt động trong nhiều tháng tại một thời điểm. Theo thời gian, tôi nhận được một ngoại lệ trên một khách hàng, và tôi không thể tìm ra nguyên nhân gây ra ngoại lệ. Ngoại lệ và theo dõi ngăn xếp là:
System.Runtime.Remoting.RemotingException: Tcp channel protocol violation: expecting preamble.
Server stack trace:
at System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadAndMatchPreamble()
at System.Runtime.Remoting.Channels.Tcp.TcpSocketHandler.ReadVersionAndOperation(UInt16& operation)
at System.Runtime.Remoting.Channels.Tcp.TcpClientSocketHandler.ReadHeaders()
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
Đó là dấu vết ngăn xếp trở lại nơi tôi thực hiện cuộc gọi từ xa.
Tôi đã xem và không thể tìm thấy gì ngoài thông thường trong các cuộc gọi mà tôi đang thực hiện hoặc trong dữ liệu mà máy chủ đang trả về.
Google tìm kiếm lỗi này không hiệu quả lắm. Hầu hết các lỗi tôi đã thấy xoay quanh ai đó chuyển đổi từ HTTP sang TCP và không thay đổi tất cả mọi thứ, vì vậy họ nhận được ngoại lệ khi họ cố gắng kết nối. Trong trường hợp của tôi, khách hàng sẽ chạy cho ngày trước khi tôi nhận được lỗi này.
Một điểm dữ liệu khác: máy chủ không nhận được nhiều yêu cầu. Hầu hết các khách hàng là trình thu thập dữ liệu web mà mỗi người thực hiện hơn 2.000 yêu cầu tới máy chủ mỗi phút. Vì vậy, máy chủ đang xử lý tối đa 500 yêu cầu mỗi giây, với các lưu lượng truy cập cao hơn. Trong mọi trường hợp, máy chủ dường như xử lý lưu lượng truy cập ổn, và tôi sẽ mong đợi một lỗi khác nếu máy chủ bị quá tải.
Bất kỳ ý tưởng nào gây ra lỗi này?
Khoản lỗ được chấp nhận? P – leppie