我正在处理一个大部分代码是 C++ 的项目。从长远来看,这家商店正在迁移到 C#,因此我们尽可能用 C# 编写新代码并通过 COM 向 C++ 公开。
我在一个 COM 对象中包装了一个 System.Net.Sockets.SslStream 和一些其他功能,用于发送和接收消息。从测试 C# 程序调用此类上的函数时,我能够毫无问题地发送和接收消息。通过 COM 公开的相同调用似乎也可以正常工作,只是在发送后我无法立即接收数据。
从 C# 测试数据发送和接收的速度非常快,我得到了我应该得到的响应。从 C++ 开始,我总是遇到超时错误。调用 Read 的函数中的数据在 C# 测试和 C++ 程序中是相同的。SslStream 中的大部分状态是相同的。就在 write 调用之后和 Read 之前,唯一的区别似乎是几个句柄和似乎是内存地址的东西,但我认为这些并不重要。与此同时,我注意到在一个名为“base”的项目中,然后在一个名为“InnerStream”的项目中,然后在“System.Net.Sockets.NetworkStream”中有一个名为“DataAvailable”的属性。这在 C# 测试中有效,而在 C++ 程序中失败。
我可以提供有关故障排除或代码片段的更多详细信息。我没有在这里包含代码,因为与问题相关的部分仍然是巨大的。我希望对于正在发生的事情有某种神奇的答案,但是几乎可以肯定该错误是深入且非常具体的。我将不胜感激任何提供有关进一步故障排除步骤的见解的东西。
通过 COM 调用 C# 会带来哪些我可能没有考虑到的复杂情况?
如果没有进入 SslStream 缓冲区,对方的消息去了哪里?
我应该在哪里寻找?