2012-04-11 6 views
2

우리는 현재 닷넷 프레임 워크 OracleClient (사용되지 않을 예정 임)를 사용하기 때문에 Devart의 오라클 용 dotConnect 평가판을 사용하여 간단한 개념 증명 작업을 시도하고 있습니다. Oracle Client 또는 Instant Client가 없어도 연결할 수있는 요구 사항이 있습니다. 이러한 이유로 나는 상사에게 dotConnect가 직접 모드와 Enterprise Library 5 (우리의 데이터 액세스 레이어에서 사용됨)로 작업 할 수있는 능력을 갖추고 있다는 사실을 증명하기 위해 노력하고 있습니다. 필자는 Devart에서 제공 한 예제를 따라 테스트 응용 프로그램의 app.config에 사용자 지정 공급자 맵을 추가했습니다. 이 모든 것은 IDe와 컴파일 된 응용 프로그램 모두에서 내 개발 컴퓨터에서 작동하는 것처럼 보였으므로 간단한 설치 및 배포 프로젝트에서 랩핑하고 msi를 빌드 한 다음 바닐라 Win 7 x86 가상 시스템에 설치했습니다 테스트를 위해 Oracle Client가 설치되어 있지 않습니다.Devart dotConnect 오라클 및 엔터프라이즈 라이브러리 사용자 지정 공급자 매핑

그냥 작동하지 않으려 고합니다. 이 테스트는 간단한 select 문을 실행하고 결과를 listview에 표시합니다 (없는 경우에는 메시지를받습니다). 나는 결과 자체에 대해 실제로 괴롭히지 않고, 단지 그것을 얻는 행위입니다. 여기

Dim db As Database = EnterpriseLibraryContainer.Current.GetInstance(Of Database)(EnvironmentName) 

은 app.config 파일에서 제공 매핑입니다 :

Activation error occured while trying to get instance of type Database, key "Testing26_devart" 

여기에 코드의 잘못된 라인이다 : 문제는 내가 테스트를 실행할 때 나는 지금까지 인정 EL 오류가있다

<add name="Testing26_devart" connectionString="User Id=Testing26;Password=Testing26;Server=ORACLE-SERVER;Direct=True;Sid=DEVORA;Port=1523;" 
     providerName="Devart.Data.Oracle" /> 
: 여기
<add databaseType="Devart.Data.Oracle.EnterpriseLibrary.OracleDatabase, Devart.Data.Oracle.EnterpriseLibrary, Version=3.5.4456.40828, Culture=neutral, PublicKeyToken=null" name="Devart.Data.Oracle" /> 

은의 app.config에서 연결 문자열입니다

나는 (다른 것들 중에서) 잘못된 연결 문자열 이름을 사용함으로써이 오류가 발생할 수 있음을 알고 있지만 처음부터 설정 파일에서이 문자열을 검색하기 때문에 이것이 정확한지 알 수 있습니다. 또한 이는 개발 환경에서 사용 된 설정과 정확히 동일합니다.

Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Data.Database", name = "Testing26_devart". 

Exception occurred while: while resolving. 

Exception is: InvalidOperationException - The type Database cannot be constructed. You must configure the container to supply this value. 

내가 공급자 매핑 내가 System.Data.OracleClient에 대한 연결 문자열의 공급자를 변경 한 후 모든 연결 문자열을 찾는 데에 아무런 문제가없는 경우 때문에 비난하는 대신 지원되지 않는 뿌려 의심 : 내부 예외는 이것이다 키워드 Direct (dotConnect 다이렉트 모드 스위치에서 가져온 것)입니다.

공급자 매핑과 관련하여 내가 잘못한 것을 볼 수 없습니다. 이전에는 사용하지 않았지만 EL 구성 도구를 사용하여 올바른 사용자 라이브러리가 실행 파일 (및 기타 EL 라이브러리)에 포함되도록했습니다. 몇 가지 예를 살펴 보았습니다. 모두 올바른 구성을 제안 했으므로 실종 되었습니까? 이것은 나를 미치게합니다.

답변

2

DbProviderFactory가 구성되어 있지 않은 것처럼 들립니다. 아마도 Devart 소프트웨어를 설치하면 machine.config에 DbProviderFactory가 설치됩니다. DbProviderFactory가 있는지 확인하려면 개발 컴퓨터의 machine.config를 확인하십시오.

machine.config를 수정하지 않으려면 app.config에 구성 정보를 추가 할 수 있습니다. 나는 버전 또는 PublicKeyToken가 어떻게 될지 모르겠어요 있도록 Devart 라이브러리와 내가 익숙하지 않다

<system.data> 
    <DbProviderFactories> 
     <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" 
description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle" />   
    </DbProviderFactories> 
    </system.data> 

: 그것은 같이 보일 것입니다.

엔터프라이즈 라이브러리에서 DbProviderFactory를 찾을 수없는 경우 데이터베이스가 등록되지 않으며 데이터베이스에 액세스하려고하면 컨테이너에서 개체를 찾을 수 없다는 메시지가 나타납니다.

+0

Tuzo 당신이 자리를 잡았습니다 - dotConnect의 설치 프로그램이 machine.config에 항목을 추가하지만 어디서나 문서에서 볼 수는 없으므로 개발 기계에서 완벽하게 작동합니다. 섹션을 app.config에 추가하자마자 예상대로 정확하게 실행되었습니다. 고맙습니다. 2 일 동안 fuslogvw, 프로세스 모니터 등을 사용하여 잘못된 것을 해결하려고 노력했습니다. –

+0

@StevePettifer, 제품 문서 (http://www.devart.com/dotconnect/oracle/docs/Deployment.html)에서이 기사에 주목하지 않은 것 같습니다. 필요한 모든 정보를 찾을 수 있습니다. – Devart

+0

@Devart - 나는 그 문서를 읽었지만 이미 알지 못하면 DbProviderFactories를 상당히 추상화하는 (새로운 것으로 밝혀진) 데이터베이스 인스턴스를 가져 오는 새로운 EL5 방법을 사용할 때 이것을 필요로하는지 분명하지 않습니다. 또한 설치 관리자가이를 키 누락 된 machine.config에 추가한다고 말하지 않습니다. 나는 당신이 machine.config에 DbProviderFactories 엔트리를 추가해서는 안되며, 대신 app.config/web.config에 추가 되어야만하는 문서에서 명확하게 밝혀야한다. (또는, 사용자가 원한다면, machine.config)를 수동으로 설치하십시오. –