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

时间:2010-06-09 13:06:50

标签: c# wcf web-services asmx

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

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

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

如果同时发送了2个或更多的呼叫,dll的所有者已经通知dll在多线程环境中不可靠。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

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