【问题标题】:.NET Web Service - How to call unmanaged C dll.NET Web 服务 - 如何调用非托管 C dll
【发布时间】:2010-06-09 13:06:49
【问题描述】:

我需要从 .NET Web 服务(asmx 或 WCF)调用 dll(非托管 c)。

从 Web 服务调用 dll 很简单,并且可以按预期工作。

但是,当我对 Web 服务进行负载测试时,问题出现了。 (错误代码 0xC0000374 -“内部错误,通常涉及堆损坏”)。

DLL 的所有者告知我,如果同时发送 2 个或多个调用,则 DLL 在多线程环境中不可靠。

在传统的 Windows 应用程序中,我会通过实现一个单例类来保护 dll 来解决这个问题。是否有推荐的方法在 Web 服务实现中实现这一点?

【问题讨论】:

  • 请尽量分享尽可能多的详细信息。 “问题出现”——什么样的问题?
  • 我真的不明白单例模式如何保护来自不同线程的并行调用。
  • 安德烈,问题已更新,包含更多信息。
  • 请您解释一下您是如何从 .NET Web 服务 asmx 调用 dll 的?我需要达到同样的效果,但似乎我无法加载 dll。
  • @JohnC 能否提供一个从 Web 服务调用 dll 的示例?

标签: c# wcf web-services asmx


【解决方案1】:

如果您只需要确保一次只有一个线程可以调用您的 dll,您可以在 lock 语句中包装对它的任何访问:

public static class MyDllCalls
{
    private static object _lockObject = new object();

    public static int SomeCall()
    {
        lock (_lockObject)
        {
            return CallSomeFunctionInYourDll();
        }
    }
}

在给定时间只有一个线程可以持有锁,所以这样可以防止多个线程并行调用。

【讨论】:

    【解决方案2】:

    为防止多个线程并行调用同一方法,您可以使用locking mechanism

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2023-03-24
      • 2011-03-04
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多