2014-11-17 2 views
1

오랫동안이 검색을 수행했지만 답변을 찾지 못했습니다.wcf 서비스의 참조 용 C++ 라이브러리

wcf 서비스 라이브러리에서 .NET 용 C++ 라이브러리 API 인 두 개의 dll을 참조하면 wcftestclient에서 래핑 된 메서드를 호출 할 때 제대로 작동합니다. 그러나 자체 웹 서버에서 라이브러리를 호스팅 할 때 "어셈블리 xxx.dll (C++ API dll 중 하나임) 또는 해당 종속성 중 하나를 찾을 수 없습니다"라고 표시됩니다. 하지만 나는 그것을 잃어 버린다고 자동으로 호스트 webserive 프로젝트에 대한 bin/debug 폴더에 복사됩니다 dll을 볼 수 있습니다. 또한 래퍼 메서드를 호출해도 전혀 문제가없는 간단한 콘솔 프로젝트에서 라이브러리를 호스팅 할 수 있습니다.

웹 구성 파일에 지정하기 위해 누락 된 간단한 구성 설정이 되었으면 좋겠습니까? 누구든지 제안 사항이 있습니까? 감사.

답변

0

나는이 문제에 대해 거의 3 일을 보냈지 만 이제는 해결되었습니다. 이 경우에 동일한 상황을 가지고있는 다른 사람을 도울 수있는 이유는 여기에 있습니다. 두 개의 C++ 라이브러리 .net api dll은 런타임에 바인딩되기 때문에 런타임까지 종속성을 찾지 않습니다. 나는 심지어 GAC에서 전체 외부 라이브러리 패키지를 등록하려고 시도했지만 도움이되지 않았습니다. 이것은 2 개의 .net API dll 중 하나가 약한 어셈블리이므로 CLR은 GAC에서이를 찾지 않아도되기 때문입니다. 내가 한 것은 서비스에 대한 정적 생성자를 만들고 정적 생성자에서 런타임에 바인딩 어셈블리를 AppDomain에로드하는 것입니다. Assembly.LoadFrom(string filePath) 메서드를 사용하고 있습니다 (다른 메서드는 어셈블리 클래스에서이 작업을 수행 할 수 있습니다). 이제 IIS에서 서비스를 호스팅하고 모든 클라이언트에서 사용할 수 있습니다. 그래서 clr이 어셈블리를 찾을 수 없다는 불평을하는 중이지만 bin/debug 폴더에서 볼 수 있습니다. 아마 늦은 바인드 어셈블리인데 AppDomain에 미리로드해야합니다. AppDomain에 대한 좋은 점은 어셈블리를 한 번만로드하면되고 개별 어셈블리를 언로드하지 않는다는 것입니다.