2012-03-28 19 views
8

के साथ ओरेकल इंस्टेंट क्लाइंट और एंटिटी फ्रेमवर्क परेशानी मैं सीखने और समझने की कोशिश कर रहा हूं कि एक एमवीसी, ईएफ, ओडीएसी 11.2.0.3 ऐप को उस सर्वर पर तैनात करना संभव है जिसमें ODP.NET का पिछला संस्करण स्थापित है । सेवर ODP.NET को अपडेट करने के बजाय (जो मैं नहीं कर सकता), मुझे लगा कि मैं ओरेकल इंस्टेंट क्लाइंट का उपयोग कर सकता हूं।विन्यास

क्या यह करने योग्य है?

1) मैं अपने प्रोजेक्ट के लिए इन DLLs जोड़ा त्वरित ग्राहक

-Oracle.DataAccess.dll

-oci.dll

-ociw32.dll

-orannzsbb11 समर्थन करने के लिए। dll

-oraociei11.dll

-OraOps 11w.dll

2) dbProviderFactories

<system.data> 
    <DbProviderFactories> 
    <add name="Oracle Data Provider for .NET" 
    invariant="Oracle.DataAccess.Client" 
    description="Oracle Data Provider for .NET" 
    type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
    </system.data> 

3) यह (AFAIK) कैसे GAC

<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" /> 
    <publisherPolicy apply="no" /> 
    </dependentAssembly> 
</assemblyBinding> 
</runtime> 
से बिन rathre में ओरेकल dll उपयोग करने के लिए है के लिए अगला मैं अद्यतन web.config

4) अंत में मेरी connectionstring

<connectionStrings> 
    <add name="Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client; 
provider connection string=&quot;DATA SOURCE=XXX;PASSWORD=XXX;PERSIST SECURITY INFO=True;USER ID=XXX&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

यह त्रुटि मैं Unabl प्राप्त है अनुरोधित नेट फ्रेमवर्क डेटा प्रदाता खोजने के लिए ई। इसे शायद स्थापित न किया जा सके।

मैं वास्तव में यहां किसी भी मदद की सराहना करता हूं। मैं बल्कि नया हूं और सीखने के लिए बहुत कुछ है। अग्रिम में धन्यवाद। चीयर्स

+1

आप में डाउनलोड किया है मेरी exe.config फ़ाइल (टैग के अंदर) के लिए निम्न XCOPY संस्करण जोड़ने के लिए था? क्या आपने देखा है कि XCOPY ज़िप फ़ाइल के अंदर install.bat और config.bat फ़ाइलें क्या कर रही हैं? मैन्युअल रूप से चीजों को करने का प्रयास करने से पहले रीडमी के अनुसार उन फ़ाइलों को बस चलाकर शुरू करें। –

+0

हाय क्रिश्चियन, मैंने ओडीएसी 11.2 रिलीज 4 (11.2.0.3.0) के लिए सार्वभौमिक इंस्टॉलर का उपयोग किया और तत्काल क्लाइंट के लिए मैंने उस पैकेज को डाउनलोड किया और डीएल को मेरी परियोजना में कॉपी किया। – Mustang31

+0

इसके बजाय XCOPY इंस्टॉल करें डाउनलोड करें। यह वास्तव में आपके द्वारा स्वयं को मिलने वाली परेशानी से बचने के लिए डिज़ाइन किया गया है (डीएलएस कॉपी करना और बिना किसी मार्गदर्शन के कॉन्फ़िगर करना) –

उत्तर

3

किसी मौजूदा ओरेकल प्रदाता को हटाने के लिए वेब कॉन्फ़िगरेशन में <DbProviderFactories> तत्व में <remove … /> अनुभाग जोड़ें। (<add> से पहले)

<remove invariant ="Oracle.DataAccess.Client" />

+0

यह चाल जेरेमी है। मुझे लगता है कि ईसाई ने बताया कि मेरे पास गलत डीएल भी थे। सभी, जिन्होंने मदद की उनको धन्यवाद! – Mustang31

+0

इसने मेरी समस्या को विंडोज सर्वर 2012 पर भी हल किया। धन्यवाद। –

+0

इसमें किसी के लिए चल रहा है क्योंकि उन्हें Oracle.DataAccess.Client पर InvariantName के बारे में कॉन्फ़िगरेशन अपवाद प्राप्त होता है: डुप्लिकेट को हटाने के लिए अपनी machine.config संपादित करें। – thomasb

1

ऐसा लगता है कि आपको अपने आवेदन में अपडेट और ओडीपी.net के नए संस्करण को केवल xcopy परिनियोजन अनुमति का उपयोग करके तैनात करने की आवश्यकता है।

चूंकि आपका आवेदन बदला जा रहा है, तो आपको असेंबली बाध्यकारी परिवर्तन या डीबीप्रोवाइडर कारखानों की आवश्यकता नहीं होनी चाहिए। बस नई ODP.net संस्करण के लिए एक संदर्भ के लिए के साथ अपने edmx आदि वर्ग पुस्तकालय के csproj अद्यतन करते हैं, उदाहरण के लिए

<Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86" /> 

आप अपने tnsnames.ora के साथ कोई समस्या हो, तो तुम क्या करने के लिए होता है निम्न में से एक: क) के आधार पर एक सिस्टम वातावरण tnsnames.ora की निर्देशिका, या ख को इंगित करने के चर TNS_ADMIN) कुछ करने के लिए कनेक्शन स्ट्रिंग परिवर्तित करें जोड़ें:

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword; 

ग) यदि आप देखें कहीं और tnsnames.ora की एक प्रति डाल सकते हैं।

+0

हाय एरिह, मुझे लगता है कि मैं अपने प्रश्न से स्पष्ट नहीं था। यह एक नया वेबपैप है जो ओरेकल इंस्टेंट क्लाइंट का उपयोग ओरेकल से नवीनतम ओडीएसी के साथ ईएफ समर्थन के साथ करता है। मैं इसे ऐसे सर्वर पर तैनात करना चाहता हूं जिसमें नवीनतम odp.net स्थापित नहीं है – Mustang31

1

यहाँ मेरी Xcopy समाधान है।

मैं भी

(https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/#comment-181)

पर पर पोस्ट किया।

लेकिन मुझे लगता है कि मैं यहां अपने मुद्दों को स्वरूपित किए बिना अपना एक्सएमएल पोस्ट कर सकता हूं।

Nuget "packages.config"

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="CommonServiceLocator" version="1.0" targetFramework="net35" /> 
    <package id="EnterpriseLibrary.Common" version="5.0.505.0" targetFramework="net35" /> 
    <package id="EnterpriseLibrary.Data" version="5.0.505.0" targetFramework="net35" /> 
    <package id="EntLibContrib.Data.OdpNet" version="5.0.505.0" targetFramework="net35" /> 
    <package id="Unity" version="2.1.505.2" targetFramework="net35" /> 
    <package id="Unity.Interception" version="2.1.505.2" targetFramework="net35" /> 
</packages> 

app.config

(ध्यान दें नीचे <clear /> टैग। इस या की जरूरत नहीं किया जा सकता है, लेकिन मैं समझ यह बाद से उन्हें बाहर खाली करने के लिए बेहतर था आप नहीं जानते कि machine.config फ़ाइल में क्या हो सकता है)

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </configSections> 


    <dataConfiguration defaultDatabase="OracleMainConnectionString"> 
    </dataConfiguration> 

    <connectionStrings> 

    <add name="OracleMainConnectionString" 
     connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyOracleServerName)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MyServiceName)));User ID=MyUserName;Password=MyPassword;" 
     providerName="Oracle.DataAccess.Client" /> 
    </connectionStrings> 

    <appSettings> 
    <add key="ExampleKey" value="ExampleValue" /> 
    </appSettings> 

    <system.data> 
    <DbProviderFactories> 
     <clear /> 
     <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
     <add name="EntLibContrib.Data.OdpNet" invariant="EntLibContrib.Data.OdpNet" description="EntLibContrib Data OdpNet Provider" type="EntLibContrib.Data.OdpNet.OracleDatabase, EntLibContrib.Data.OdpNet, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" /> 
    </DbProviderFactories> 
    </system.data> 


</configuration> 

मैं एक x64 विंडोज 7 मशीन पर विकास कर रहा हूं।

मैंने डाउनलोड: ODAC1120320Xcopy_32bit.zip (oracle.com से)

कौन सा है:

ODAC 11.2 रिलीज 5 (11.2.0.3.20) डाउनलोड XCopy संस्करण [11 सितंबर जारी 2012]

मैंने इस ज़िप फ़ाइल को अनजिप कर दिया।

मैं खोज की है और इन फ़ाइलों को बाहर पकड़ा:

oci.dll Oracle.DataAccess.dll orannzsbb11.dll oraociei11.dll OraOps11w.dll

ध्यान दें, जब वहाँ के 2 फ़ाइलें थे वही नाम, मैंने अपनी 3.5 फ्रेमवर्क आवश्यकता के लिए "bin \ 2.x \" या "odp.net20 \ bin" संस्करण लिया (मैं अभी तक 4.0 पर नहीं हूं)।

मैंने इन फ़ाइलों को लिया, और उन्हें एक सबफ़ोल्डर में रखा जहां से मेरी .sln फ़ाइल रहता है।

.\MySolution.sln 
.\MyConsoleApplicationFolder\MyConsoleApp.csproj 
.\ThirdPartyReferences\ 
.\ThirdPartyReferences\Oracle\ 

मैं

.\ThirdPartyReferences\Oracle\ 

फ़ोल्डर

मैं इस्तेमाल किया "संदर्भ जोड़ें" "MyConsoleApp.csproj" करने के लिए Oracle.DataAccess.dll के लिए एक संदर्भ जोड़ने के लिए ऊपर सभी फाइलों को जगह csharp परियोजना। (इसका मतलब था ब्राउज़िंग के लिए निश्चित रूप से ".. \ ThirdPartyReferences \ ओरेकल \")

मैं "घटना बनाएँ पोस्ट" "अतिरिक्त" कॉपी करने के लिए एक प्रयोग किया जाता है (उर्फ, "गौण)" फ़ाइलें

मेरे लाइनों मेरी पोस्ट का निर्माण घटना में थे:

copy $(ProjectDir)..\ThirdPartyReferences\Oracle\oci.dll $(TargetDir)*.* 
copy $(ProjectDir)..\ThirdPartyReferences\Oracle\orannzsbb11.dll $(TargetDir)*.* 
copy $(ProjectDir)..\ThirdPartyReferences\Oracle\oraociei11.dll $(TargetDir)*.* 
copy $(ProjectDir)..\ThirdPartyReferences\Oracle\OraOps11w.dll $(TargetDir)*.* 

ध्यान दें, मेरी पोस्ट का निर्माण घटना यूआरएल निर्देश से ऊपर "यदि नई कॉपी" बदल देता है।

जब मैंने अपना प्रोजेक्ट चलाया ........ मुझे कुछ गायब डीएलएल त्रुटियां मिलीं।

नोट: असेंबली में एंटरप्राइज़ लाइब्रेरी.डाटा ऑब्जेक्ट्स पर आपकी कॉल है ... आपको "माइक्रोसॉफ्ट नहीं मिल सकता है। व्यवहार। कुछ नामस्थान। त्रुटियों को दूर होने तक बस इन डीएल के संदर्भों को जोड़ना जारी रखें (ऊपर दिया गया पैकेज.कॉन्फिग नीचे खींच जाएगा)। मैं चला गया और के लिए एक संदर्भ जोड़ा

"Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified." 

तो (बेशक Nuget चलाने के बाद, सभी फाइलों को डाउनलोड करने के लिए) :

\ संकुल \ CommonServiceLocator

यहाँ की तरह एक विशेष से एक है। 1.0 \ lib \ NET35 \ Microsoft.Practices.ServiceLocation.dll

इससे मुद्दों को मंजूरी मिली।

और मेरी कोई तिथि नहीं कोड:

/* 
    using System; 
    using System.Data; 
    using System.Data.Common; 
    using Microsoft.Practices.EnterpriseLibrary.Data; 
*/ 
public IDataReader EmployeesGetAll() 
{ 

    IDataReader returnReader = null; 

    try 
    { 

     Database db = DatabaseFactory.CreateDatabase(); 
     DbCommand dbc = db.GetSqlStringCommand("SELECT * FROM (SELECT * FROM TEMPLOYEE) WHERE ROWNUM <= 25"); 
     returnReader = db.ExecuteReader(dbc); 
     return returnReader; 

    } 

    finally 
    { 
    } 

} 

और यह काम किया (ध्यान दें "* चुनें" डेमो प्रयोजनों के लिए ही है)।

धन्यवाद:

https://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/#comment-181

मुझे लगता है कि इस ODP.NET एक "xcopy" तैनाती बनाता है।

मुझे अभी भी सुनिश्चित करने के लिए एक स्वच्छ मशीन पर परीक्षण करने की आवश्यकता है।

लेकिन दिन के अपने अंत ..............

================

अतिरिक्त सूचना:

उपरोक्त सबकुछ सही है। हालांकि, मैंने एक चेतावनी मारा। मैं अपने कोड का परीक्षण करने के लिए "कंसोल एप्लिकेशन" का उपयोग कर रहा था।

जब आप विजुअल स्टूडियो में एक नया कंसोल एप्लिकेशन जोड़ते हैं, तो यह x86 पर डिफॉल्ट होता है।

के रूप में यहां देखी गई:

http://www.xavierdecoster.com/post/2011/02/15/console-application-visual-studio-gotcha-on-x64-os-aspx

संपादित करें: (अपडेट किया गया लिंक)

http://www.xavierdecoster.com/post/2011/02/15/console-application-visual-studio-gotcha-on-x64-os

तो जब मैं सभी विन्यास और एक वास्तविक परियोजना में कोड और सामान डाल (जो था x64 बिट मशीन पर "कोई भी CPU" पर सेट करें) ... मैंने जो भी किया है, वह काम करना बंद कर दिया है। : <

थोड़ा फेरबदल के बाद ........ मैं oracle.com ODAC1120320Xcopy_x64.zip पर इस फ़ाइल पाया मैं तो सब कुछ मैंने ऊपर किया दोहराया है, लेकिन खोज इस x64 ज़िप फ़ाइल की अनज़िप फ़ाइलें ।

सबकुछ काम कर रहा है।

लेकिन कंसोल एप्लिकेशन के साथ "x86" डिफ़ॉल्ट चीज़ ने मुझे लूप के लिए फेंक दिया।

+0

1. मैंने अपनी फाइलें \ bin \ Debug \ निर्देशिका से अर्द्ध-क्लीन मशीन पर रखीं और मेरा कंसोल एप्लिकेशन काम करता था। यह अच्छी खबर है। – granadaCoder

+0

2. इस समाधान के साथ pooper। oraociei11.dll 127 एमबी है! Youch! – granadaCoder

+0

http://www.xavierdecoster.com/post/2011/02/15/console-plication-visual-studio-gotcha-on-x64-os-aspx नहीं मिला – Kiquenet

0

तत्काल क्लाइंट के माध्यम से ODP.NET को तैनात करते समय मुझे एक ही त्रुटि (डेटा प्रदाता नहीं मिला) मिल रहा था। केवल बात यह है कि मुझे क्या करना जरूरत

<system.data> 
<DbProviderFactories> 
<add name="Oracle Data Provider for .NET" 
invariant="Oracle.DataAccess.Client" 
description="Oracle Data Provider for .NET" 
type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
</DbProviderFactories> 
</system.data> 
संबंधित मुद्दे