我需要从.NET Web服务(asmx或WCF)调用dll(非托管c)。
从Web服务调用dll很简单,并按预期工作。
但是,当我加载测试Web服务时会出现问题。 (错误代码0xC0000374 - “内部错误,通常涉及堆损坏”)。
如果同时发送了2个或更多的呼叫,dll的所有者已经通知dll在多线程环境中不可靠。
在传统的Windows应用程序中,我通过实现单例类来保护dll来解决这个问题。是否有推荐的方法在Web服务实现中实现这一目标?
答案 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。