c# - .NET Web 服务 - 如何调用非托管 C dll

标签 c# wcf web-services asmx

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

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

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

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

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

最佳答案

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

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

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

在给定时间只有一个线程可以持有锁,因此您可以通过这种方式防止多个线程并行调用。

关于c# - .NET Web 服务 - 如何调用非托管 C dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3006022/

相关文章:

c# - Querystring 中的 Guid 正在以某种方式进行转换

c# - .Net 4.0 框架和 4.5 框架之间的区别?

c# - WCF 中的调用上下文

wcf - 无法连接到辅助角色中托管的 WCF 服务

java - 异步 Web 服务回调机制可以用于 Java 和 .NET 客户端吗?

java - 如何为 Java RESTful Web 服务发送 HTTP 错误?

c# xml 显示最高值

wcf - 通过 .net 中的 Web 服务调用批处理

web-services - 使用 JAXB 和 JAXWS 注释将枚举属性编码到 XML

c# - 使页脚模板在按钮单击时可见和不可见