无法从调用com visible c#库的传输连接VB6读取数据

无法从调用com visible c#库的传输连接VB6读取数据,com,vb6,Com,Vb6,我有一个c#Framework 4.7.2 Com可视库,它调用web api VS2017 C#IDE库中的单元测试工作正常 但是,如果我尝试通过VB6调用,我会 System.IO.IOException无法从传输连接读取数据:rempte强制关闭了现有连接 主持人 System.Net.Sockets.SocketException 我正在运行Windows 10 我以管理员的身份打电话 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regas

我有一个c#Framework 4.7.2 Com可视库,它调用web api

VS2017 C#IDE库中的单元测试工作正常

但是,如果我尝试通过VB6调用,我会

System.IO.IOException无法从传输连接读取数据:rempte强制关闭了现有连接 主持人

System.Net.Sockets.SocketException

我正在运行Windows 10

我以管理员的身份打电话

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm /codebase /verbose  /tlb:SBD.ComBridge.tlb C:\dev\SBD.ComBridge.dll 
要创建.dll和.tlb

我还尝试以管理员身份从VS2017命令提示符运行regasm

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm /codebase /verbose  /tlb:SBD.ComBridge.tlb C:\dev\SBD.ComBridge.dll 
RegAsm报告库已成功注册

在Vb6中,(简化的)代码是

在Bridge实现中,(简化的)代码是

我知道从SetReadyByInfo中调用服务的代码是有效的,因为当我在VS2017中运行它时,我的单元测试通过了

不幸的是,我被要求不要发布代码。但是,我知道vb6代码正确地调用Com,因为我调用的其他方法没有错误

我有一个类似的问题,解决方案是升级框架。然而,我不能升级VB6框架(大的重写不是一个选项),可能我只需要生成一个.Exe并向它输出

[更新]

问题解决了。 如果我加上

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
然后我的com调用在VB6上工作

正如链接所指出的

这不是一个好的解决方案,因为它对TLS版本进行了硬编码 使用,因此将来不会使用TLS1.3


根据我问题底部的更新部分,解决方法包括

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

我需要进一步调查,以获得更完整的解决方案

必须显示一些代码,包括调用VB6代码和.NET端。是否
PackAndSend.SetReadByInfo
是阻塞调用?这是一个.NET例外,所以我认为下一组要发布的代码是这样的。正如您所发现的,TLS可能是问题所在。但是,如果计算机和安装的.NET framework支持TLS 1.2(这似乎是事实,因为您说它可以与其他程序一起使用),您的VB6 exe可能没有使用良好的.NET framework(在给定的计算机上可以安装多个),或者没有使用有效的配置,则不必升级任何内容。在这里查看答案,例如:(适应您的上下文)基于@SimonMourier链接,您可能只需要使用代码根据需要显式设置“ServicePointManager.SecurityProtocol”。您可以尝试配置文件路由,但由于VB6是主机应用程序,我不确定基于配置文件的方法是否有效。谢谢:-)如果您找到了解决方案,您应该回答自己一些详细信息,说明您为使其有效所做的工作。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;