gpt4 book ai didi

c# - WCF 服务中的 COM 对象

转载 作者:行者123 更新时间:2023-11-30 17:12:19 24 4
gpt4 key购买 nike

我用 .NET 4.0 编写的 WCF 服务有一个问题,即第二个或任何其他调用会卡住。 WCF 服务除了调用用 Delphi XE 编写的 COM 对象外什么都不做。线程模型设置为 Both,服务的 InstanceContextMode 设置为 PerCall。该对象只不过是 BSTR DoRequest(BSTR Request)。我使用 Marshal.ReleaseComObject,但在一篇文章中读到这不是清理 com 对象的好方法;我也试过了。

我尝试了以下操作:

  • 添加了日志记录以查看 WCF 服务卡住的位置。它在 COM 调用中。
  • 添加了未处理的异常处理程序,但没有异常。
  • 检查 Delphi 对象是否使用静态变量
  • 尝试用 Delphi XE2 编译(可能是 delphi com 库中的错误)
  • 用多线程 Delphi 压力测试工具尝试了对象,看看问题是否出在相同,但效果很好。
  • 使用 C# 控制台压力测试工具尝试了该对象并获得了与在 WCF 服务中。
  • 在创建对象、执行调用和销毁对象的过程中添加了一个锁定对象目的。这没有帮助。
  • 尝试在 WCF 中创建一个新线程并将线程模型设置为 STA;将 Delphi 对象线程模型设置为 Single。这没有帮助。
  • 试图在 COM+ 服务中运行该对象;这没有帮助。
  • 检查了 WCF 节流,设置为 100
  • 检查服务的最大连接数并设置为 MaxInt

COM DLL 是 32 位的,所以我的 VStudio 项目设置限制为 x86。我在 Windows 2008 R2 上运行。也许这很重要:Delphi COM 对象加载一个 C++ DLL,这可能不是安全的。

我使用Reflector + Dennis Bauer FileDisassembler反编译生成的COM Wrapper。我看不出有什么特别之处。

使用 Windebug 似乎不是很容易,因为 Delphi 不支持 PDB 文件。

想法用完了,请帮忙:-)

最佳答案

我在 delphi 代码中围绕对第三方 dll 的所有调用添加了关键部分。看起来它现在正在工作。这并不能解释 com 对象的行为,但现在它似乎可以工作了。

关于c# - WCF 服务中的 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com