2011-03-10 11 views
2

SQL 2008은 .NET 4.0을 지원하지 않습니다.SQL CLR 및 .NET 4.0

.NET 4.0 용으로 컴파일 된 여러 어셈블리가 있습니다. 이 어셈블리 중 하나에서 루틴을 시작하려면 SQL 트리거가 필요합니다.

WCF 또는 다른 형태의 프로세스 간 의사 소통이 수반되지 않는 방법이 있습니까? 이 루틴을 시작하기 위해 SQL CLR을 얻으려면? 어쩌면 4.0 코드를 실행하는 2.0 타겟 어셈블리를 가질 수 있습니까? .NET 4.0은 여러 런타임 버전을 동일한 프로세스에서 호스팅 할 수 있다는 것을 알고 있지만 어떻게 활용할지는 모르겠습니다.

대체로 COM 래퍼를 사용하여 .NET 4.0 코드를 시작할 수는 있지만 그렇게하지 않는 것이 좋습니다.

+0

http://stackoverflow.com/questions/2781624/sqlclr-using-the-wrong-version-of-the-net-framework –

+0

나는 비슷한 문제를 가지고 당신이 이제까지 작업이나요 : HTTP : //stackoverflow.com/questions/7314771/clr-stored-procedure-needs-to-call-net-assembly – MartinaL

+0

Nope. 다른 접근 방식을 취했다. – Jeff

답변

0

나는 아주 간단한 콘솔 앱을 만들 것이다. 필요한 바이너리를 참조합니다. 그런 다음 호출하려는 메소드에 전달할 인수가있는 콘솔 응용 프로그램을 호출하여 메소드를 시작하는 것이 간단합니다.

+0

이 문제와 관련된 보안 문제가 있습니다. – Jeff

+0

어떤 종류의 문제입니까? 귀하의 서버는 "잘못된"사람들이 이용할 수 있거나 서버 사용자가 콘솔 응용 프로그램을 호출하는 데 문제가 있습니까? – Asken

+0

배포 된 클라이언트는 xp_cmdshell 사용을 지원하지 않습니다. – Jeff

1

SQL CLR 트리거의 보안을 완화하면 "메시지 큐"라고하는 디스크에 파일을 쓰고 FileSystemMonitor 또는 공식 Message Queue 모니터를 사용하여 .NET 버전을 사용하여 필요한 작업을 처리 할 수 ​​있습니다. 이렇게하면 여러 .NET Framework 버전의 복잡성을 피할 수 있으며 명령 셸이 직접 위험을 감수하고 XML 또는 기타 구조화 된 데이터를 파일에 기록하면 필요한 데이터 필드를 전달할 수 있습니다.

보안을 위해이 시스템을 매우 유연하게 만들지 않으므로 파일에 정의 된 프로그램을 호출 할 수 있습니다. 나는 단지 에 파일을 사용하여 알려진 프로그램에 매개 변수를 전달할 것을 제안합니다.