2013-02-03 16 views
10

से काम करती है, मैंने हाल ही में Azure पर अपनी पहली वेबसाइट सेट की है। अभी के लिए, यह मूल रूप से घर और खाता नियंत्रकों के साथ मानक एमवीसी 4 टेम्पलेट वेबसाइट है। Azure में, मेरे पास एक वेबसाइट है, और एक SQL डेटाबेस है। मैं एसएसएमएस से एसक्यूएल एज़ूर डेटाबेस तक पहुंच सकता हूं, और अपनी वेबसाइट द्वारा उपयोग किए जाने वाले लॉगिन और उपयोगकर्ता को स्थापित कर सकता हूं।Azure वेबसाइट से SQL Azure DB तक नहीं पहुंच सकता है, भले ही समान कनेक्शन स्ट्रिंग स्थानीय वेबसाइट

मेरे विकास के माहौल में, मेरे विकास डेटाबेस पर इशारा करते हुए, मैं/खाता/लॉगिन पृष्ठ जुर्माना एक्सेस कर सकता हूं। मैं पंजीकरण कर सकता हूं, और मैं अपने स्थानीय डीबी में नया उपयोगकर्ता देख सकता हूं। मैं अपने एसक्यूएल एज़ूर डीबी पर अपनी विकास वेबसाइट को इंगित करने के लिए कनेक्शन स्ट्रिंग भी बदल सकता हूं, और फिर मैं/खाता/लॉगिन कर सकता हूं और नए उपयोगकर्ताओं को पंजीकृत कर सकता हूं। मैं एसक्यूएल एज़ूर डीबी में उन नए उपयोगकर्ताओं को देख सकता हूं।

समस्या तब होती है जब मैं वेबसाइट को Azure पर तैनात करता हूं। मेरे पास मेरी प्रकाशन सेटिंग फ़ाइल से जुड़ी एक ट्रांसफॉर्म कॉन्फ़िगरेशन है, और साइट को एज़ूर में प्रकाशित करते समय आउटपुट विंडो में देख सकता है कि यह ट्रांसफॉर्मेशन तैनाती के दौरान लागू होता है। यह स्थानीय विकास डीबी कनेक्शन स्ट्रिंग को SQL Azure कनेक्शन स्ट्रिंग में संशोधित करता है। मैंने यह भी सत्यापित किया है कि यह SQL Azure कनेक्शन स्ट्रिंग वास्तविक web.config फ़ाइल में तैनात है (वास्तविक वेब.कॉन्फिग को पुनर्प्राप्त करने के लिए FileZilla FTP का उपयोग करके)। मैं [mysite] .AzureWebsites.net पर मेरी साइट के मुख पृष्ठ पर पहुंच सकते हैं, लेकिन जब मैं लॉगिन लिंक पर क्लिक करें/खाता/लॉग इन पृष्ठ पर जाने के, मैं निम्नलिखित त्रुटि मिलती है:

[ArgumentException: Format of the initialization string does not conform to specification starting at index 0.] 
System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) +5313265 
System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) +124 
System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) +95 
System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +59 
System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) +24 
System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) +167 
System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) +61 
System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) +66 

System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection) +122 
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +32 
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +127 
System.Data.Entity.Internal.LazyInternalConnection.get_ProviderName() +13 
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +346 
System.Data.Entity.Internal.InternalContext.CreateObjectContextForDdlOps() +17 
System.Data.Entity.Database.Exists() +36 
[MyWebsite].Filters.SimpleMembershipInitializer..ctor() +105 

यह लगता है यह सुझाव देने के लिए कि मेरे कनेक्शन स्ट्रिंग के साथ कोई समस्या है, लेकिन जैसा कि मैंने पहले उल्लेख किया था, यह वही कनेक्शन स्ट्रिंग मेरी स्थानीय वेबसाइट से काम करती है।

मैंने माना है कि यह समस्या फ़ायरवॉल से संबंधित हो सकती है, लेकिन मैंने Azure प्रबंधन पोर्टल में सेटिंग्स की जांच की है, और Windows Azure Services फ़ायरवॉल नियम उस पहुंच को अनुमति देने के लिए लागू किया गया है। साथ ही, मैंने एसक्यूएल एज़ूर डीबी तक पहुंचने के लिए अपनी स्थानीय मशीन के लिए फ़ायरवॉल नियम को हटाने का प्रयास किया है, यह देखने के लिए कि मुझे एक समान अपवाद मिलेगा, लेकिन अपवाद फेंकना बहुत स्पष्ट रूप से फ़ायरवॉल से संबंधित था।

मैंने Azure प्रबंधन पोर्टल के माध्यम से SQL Azure कनेक्शन स्ट्रिंग को जोड़ने का भी प्रयास किया है (हालांकि मुझे प्रदाता निर्दिष्ट करने का तरीका नहीं देखा गया था) - कहने की जरूरत नहीं है, मुझे वही मिला "प्रारंभिकरण का प्रारूप ... "ऊपर उल्लिखित अपवाद। web.config में

मेरे कनेक्शन स्ट्रिंग निम्न स्वरूप में है:

<add name="[my connection name]" 
    connectionString="Server=tcp:abc123.database.windows.net,1433;Database=[my database];User ID=[my login]@abc123;Password=[my password];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" 
    providerName="System.Data.SqlClient" /> 

कोई सुझाव बहुत स्वागत किया जाएगा।

उत्तर

7

मैं आखिरकार इसके नीचे पहुंच गया हूं। मुझे अब तक यह नहीं पता था कि वेब.कॉन्फिग में 2 कनेक्शन स्ट्रिंग्स हैं जो आखिरकार विंडोज़ एज़ूर वेबसाइट पर तैनात हो जाती हैं - मेरा खुद का कस्टम एक, लेकिन एक और डिफॉल्ट कनेक्शन कनेक्शन स्ट्रिंग भी है, जिसमें प्रारूप है:

<add name="DefaultConnection" connectionString="DefaultConnection_ConnectionString" providerName="System.Data.SqlClient" /> 
  • जाहिर है, वैध कनेक्शन स्ट्रिंग नहीं है (और इसलिए ऊपर प्रारूप अपवाद)। जब आप एफ़टीपी का उपयोग कर अपने एज़ूर वेबसाइट से वास्तविक web.config डाउनलोड करते हैं तो आप इसे देख सकते हैं।

यह डिफ़ॉल्ट कनेक्शन स्ट्रिंग web.configs या मेरे समाधान में विभिन्न परिवर्तनों में कहीं भी नहीं है। प्रकाशन के दौरान आउटपुट विंडो को देखते हुए, कई रूपांतरण हैं जो web.config पर लागू होते हैं। मैं उन फ़ाइलों के विभिन्न संस्करणों से गुजर चुका हूं जो बिल्ड/प्रकाशन चक्र के दौरान उत्पन्न होते हैं, और इनमें से कोई भी उनमें डिफ़ॉल्ट कनेक्शन कनेक्शन स्ट्रिंग नहीं है, यहां तक ​​कि obj \ release \ package \ PackageTmp \ फ़ोल्डर में भी नहीं। तो मैं वेब परिनियोजन चरण में कुछ अनुमान लगा रहा हूं इसे वेब.कॉन्फिग के अंतिम संशोधन के रूप में डालने वाला है। Publsettings फ़ाइल में एक MSDeployParameterValue तत्व है जो कनेक्शन स्ट्रिंग्स और web.config का उल्लेख करता है - मुझे लगता है कि यह हो सकता है।

AccountModels.cs फ़ाइल में, एक संदर्भ इस DefaultConnection लिए किया जाता है:

public UsersContext() 
: base("DefaultConnection") 
{ 
} 

यह कैसे विशेष कनेक्शन स्ट्रिंग चुना जाता है। इस पैरामीटर को आपके कस्टम कनेक्शन स्ट्रिंग नाम में बदलना सुनिश्चित करता है कि आपके कस्टम डेटाबेस को विभिन्न खाता सामग्री के लिए उपयोग किया जाता है, और उपरोक्त प्रारूप प्रारूप को हल करता है।

+0

उपयोगकर्ता कॉन्टेक्स्ट कन्स्ट्रक्टर पर अच्छा पकड़। –

+0

क्या आप वेब परिनियोजन डेटाबेस अद्यतन का उपयोग कर रहे हैं? इस पर एक चेकबॉक्स है कि आप प्रोजेक्ट में कनेक्शन स्ट्रिंग जोड़ना चाहते हैं या नहीं। – kvetis

-1

"एन्क्रिप्ट = ट्रू;" को हटाने का प्रयास करें या "TrustServerCertificate = True;" जोड़ने का प्रयास करें - अधिक जानकारी के लिए पढ़ें SqlConnection.ConnectionString Property, लेकिन मूल रूप:

Beginning in .NET Framework 4.5, when TrustServerCertificate is false (the default) and Encrypt is true, the server name (or IP address) in a SQL Server SSL certificate must exactly match the server name (or IP address) specified in the connection string.

+0

अफसोस की बात है, इनमें से कोई भी विकल्प काम नहीं करता, viperguynaz। लेकिन अब मैं देख सकता हूं कि एक ही कनेक्शन स्ट्रिंग स्थानीय रूप से कैसे काम कर सकती है लेकिन Azure-hosted वेबसाइट से नहीं। मैंने आपके द्वारा पोस्ट किए गए लिंक के माध्यम से पढ़ा होगा हालांकि यह देखने के लिए कि क्या कुछ और है जिसे मैं कोशिश कर सकता हूं। आपकी सहायताके लिए धन्यवाद! –

0

एसक्यूएल Azure का कनेक्शन तार के बारे में

  • एसक्यूएल Azure डेटाबेस सेवा TCP पोर्ट के साथ ही उपलब्ध है 1433 सुनिश्चित करें कि आपका फ़ायरवॉल कि टीसीपी पोर्ट 1433 पर आउटगोइंग टीसीपी संचार की अनुमति देता है।

  • एसक्यूएल एज़ूर विंडोज प्रमाणीकरण का समर्थन नहीं करता है। भरोसेमंद कनेक्शन हमेशा गलत पर सेट किया जाएगा।

  • एसक्यूएल एज़ूर अनएन्क्रिप्टेड कनेक्शन का समर्थन नहीं करता है। आपको अपनी कनेक्शन स्ट्रिंग में निर्दिष्ट करने की आवश्यकता है जिसे आप कनेक्शन एन्क्रिप्ट करना चाहते हैं।

  • ओएलई डीबी का उपयोग करके एसक्यूएल एज़ूर से कनेक्ट करना आधिकारिक तौर पर समर्थित नहीं है।

स्टैंडर्ड रास्ता

Server=tcp:[serverName].database.windows.net;Database=myDataBase; 
User ID=[LoginForDb]@[serverName];Password=myPassword;Trusted_Connection=False;Encrypt=True; 

Use '[email protected]' for the User ID parameter.

अधिक जानकारी के लिए इस की जाँच Connection strings for SQL Azure

मुझे आशा है कि यह आप में मदद मिलेगी।

+0

आपके उत्तर के लिए धन्यवाद, सम्पथ, लेकिन मुझे लगता है कि ऊपर पोस्ट की गई कनेक्शन स्ट्रिंग इन सभी मानदंडों को फिट करती है। साथ ही, मेरे स्थानीय डेटाबेस से उपयोग किए जाने पर एक ही कनेक्शन स्ट्रिंग ठीक काम करती है, जो बताती है कि कनेक्शन स्ट्रिंग में कुछ भी गलत नहीं है। साथ ही, जैसा कि मैं Azure पर होस्ट की गई वेबसाइट से SQL Azure डेटाबेस से कनेक्ट कर रहा हूं, मेरे पास फ़ायरवॉल नियमों में बंदरगाहों पर कोई नियंत्रण नहीं है - यह विंडोज़ एज़ूर मैनेजमेंट पोर्टल में कोई विकल्प नहीं है - कोई भी जिसे मैं वैसे भी देख सकता हूं । मैं आपके द्वारा पोस्ट किए गए लिंक पर एक नज़र डालेगा। धन्यवाद संपथ! –

1

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैं अपने निष्कर्ष साझा करना चाहता था। मेरी .pubxml फ़ाइल में, यह मेरे स्थानीय डीडी कनेक्शन स्ट्रिंग को संग्रहीत करता है, और किसी भी बिल्ड, या प्रकाशन पर अपडेट नहीं होगा। काम करने के क्रम में मुझे अपने एज़ूर डीबी कनेक्शन स्ट्रिंग्स के साथ प्रकाशित फ़ाइल को मैन्युअल रूप से अपडेट करना पड़ा। उम्मीद है कि यह किसी को समय बचाने में मदद करता है।