.NET Web Service - Как вызвать неуправляемую C dll - PullRequest
3 голосов
/ 09 июня 2010

У меня есть требование для вызова dll (неуправляемый c) из веб-службы .NET (asmx или WCF).

Вызов dll из веб-сервиса прост и работает, как и ожидалось.

Однако при загрузке теста веб-службы возникают проблемы.(код ошибки 0xC0000374 - «внутренняя ошибка, обычно связанная с повреждением кучи»).

Владелец dll сообщил мне, что dll ненадежен в многопоточной среде, если 2 илив это же время отправляется больше вызовов.

В традиционном приложении для Windows я бы справился с этим, внедрив одноэлементный класс для защиты DLL. Есть ли рекомендуемый подход для достижения этого в реализации веб-службы

Ответы [ 2 ]

3 голосов
/ 09 июня 2010

Если вам нужно только, чтобы только один поток одновременно мог вызывать вашу dll, вы можете обернуть любой доступ к ней в lock инструкциях:

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

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

Только один поток может удерживать блокировку в данный момент времени, поэтому вы можете запретить нескольким потокам выполнять вызовы параллельно.

0 голосов
/ 09 июня 2010

Для предотвращения одновременного вызова несколькими потоками одного и того же метода можно использовать механизм блокировки .

...