SslStream作为COM对象访问时响应不同
SslStream responds differently when accessed as COM object
我正在与一个项目合作,该项目的大部分代码是C++。从长远来看,商店正在迁移到C#,因此我们尽可能在C#中制作新代码,并通过COM.向C++公开
我在一个COM对象中封装了一个System.Net.Sockts.SslStream和一些其他功能,该对象用于发送和接收消息。当从测试C#程序调用这个类上的函数时,我能够毫无问题地发送和接收消息。通过COM公开的相同调用似乎也能正常工作,只是我无法在发送后立即接收数据。
从C#测试数据发送和接收非常快,我得到了我应该得到的响应。从C++,我总是得到超时错误。调用Read的函数中的数据在C#测试和C++程序中是相同的。SslStream中的大部分状态都是相同的。就在写调用之后和读调用之前,唯一的区别似乎是,几个句柄和什么似乎是内存地址,但我认为这些并不重要。与此同时,我注意到,在一个名为"base"的项中,然后在一个称为"InnerStream"的项内,然后在"System.Net.Sockets.NetworkStream"内,有一个名"DataAvailable"的属性。这在C#测试中是正确的,在C++程序中是错误的。除了我所描述的之外,我不知道这些项目之间有任何有意义的区别。
我可以提供有关疑难解答或代码片段的更多详细信息。我没有在这里包含代码,因为仅仅是与问题相关的部分仍然是巨大的。我希望有一个神奇的答案来回答正在发生的事情,然而这个错误几乎可以肯定是深度和非常具体的。如果能提供有关进一步故障排除步骤的见解,我将不胜感激。
通过COM调用C#会带来哪些我可能没有考虑到的复杂情况?
如果没有进入SslStream缓冲区,其他方面的消息会去哪里?
我应该去哪里找?
我已经找到了答案,它与COM、C#、C++无关,而是与相关系统之间发送的消息的格式有关。另一个系统使用额外的回车来指示消息的结束。当丢失时,远程系统只需停止响应,直到启动另一个SSL会话。
在项目的前一点上,我在发送到服务器的消息末尾添加了一个额外的换行符。我已经复制了其中一条消息来生成我的完全c#测试。有几次,我还将从两个代码库发送的消息放入合并/差异查看器中。我从来没有注意到这种差异,因为我禁用了空白匹配。
从现在起,当我将原始输出与其他原始输出进行比较时,我将确保我的工具不会向我隐藏差异
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- C++:无法访问声明的受保护成员
- SslStream作为COM对象访问时响应不同
- Qt网络访问管理器JSON获取响应