2010-06-09 4 views
3

.NET 웹 서비스 (asmx 또는 WCF)에서 dll (관리되지 않는 c)을 호출해야합니다..NET 웹 서비스 - 관리되지 않는 C DLL 호출 방법

웹 서비스에서 DLL을 호출하는 것은 간단하고 예상대로 작동합니다.

그러나 웹 서비스 테스트를로드 할 때 문제가 발생합니다. (오류 코드 0xC0000374 - 일반적으로 힙 손상과 관련된 내부 오류입니다.)

2 개 이상의 호출이있는 경우 다중 스레드 환경에서 dll이 신뢰할 수 없다고 알려졌습니다 동시에 전송됩니다.

을 기존의 윈도우 응용 프로그램에서, 나는 DLL을 보호하기 위해 싱글 톤 클래스를 구현하여이 다루는 것입니다. 웹 서비스 구현이를 달성하기위한 권장되는 방법이 있습니까?

+2

** 가능한 한 ** 세부 정보를 공유하십시오. "문제가 나타납니다"- 어떤 종류의 문제입니까? – Andrey

+1

싱글 톤 패턴이 다른 스레드에서 오는 병렬 호출로부터 어떻게 보호되는지 실제로 알 수 없습니다. –

+0

Andrey, 질문이 더 많은 정보로 업데이트되었습니다. – JohnC

답변

3

한 번에 하나의 스레드 만 dll을 호출 할 수 있도록하려면 lock 문에 액세스 할 수 있습니다.

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

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

주어진 시간에 하나의 스레드 만 잠금을 유지할 수 있으므로이 방법을 사용하면 여러 스레드가 동시에 호출하는 것을 방지 할 수 있습니다.

0

같은 방법을 병렬로 호출하는 여러 스레드를 방지하려면 locking mechanism을 사용할 수 있습니다.

관련 문제