2016-04-18 10 views
7

से कनेक्ट नहीं हो सकता है मैं एक 3-स्तरीय आर्किटेक्चर प्रोग्राम को डिज़ाइन करने के तरीके के बारे में सिखाने के लिए एक आईआईएस-होस्टेड ऐप (मूवी डेटाबेस के रूप में) चलाने की कोशिश कर रहा हूं: एमवीसी ऐप, डब्ल्यूसीएफ सर्विसेज, एसक्यूएल सर्वर डीबी। चूंकि मेरे पास पूर्ण SQL सर्वर के लिए लाइसेंस कुंजी नहीं है, इसलिए मैंने स्थानीय डीबी के साथ जाने का निर्णय लिया और डब्ल्यूसीएफ सेवाएं हैं जो मेरी संग्रहीत प्रक्रियाओं के चारों ओर लपेटती हैं। यह पहली बार है जब मैं स्थानीय डीबी का उपयोग कर रहा हूं और अपने उदाहरण से कनेक्ट मुद्दों में चल रहा हूं, v13.0।स्थानीय डीबी

मेरे समस्या:

मैं नहीं, मेरे जीवन के लिए, वी.एस. में अपने प्रोजेक्ट LocalDB उदाहरण से कनेक्ट कर सकते हैं।

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. The specified LocalDB instance does not exist.

मेरे कनेक्शन स्ट्रिंग (Web.config से):

<connectionStrings> 
    <add name="MovieDB" connectionString="Data Source=(localdb)\v13.0;Initial Catalog=MovieDB;Integrated Security=True;AttachDbFilename=|DataDirectory|\MovieDB.mdf" /> 
</connectionStrings> 

उससे कनेक्ट और प्रश्नों को चलाने के लिए sqlcmd का उपयोग करना ठीक चलाता है:

Connecting to LocalDB instance just fine from command line

मैं निम्नलिखित त्रुटि प्राप्त हो रही

विजुअल स्टूडियो एसक्यूएल सर्वर ऑब्जेक्ट एक्सप्लोरर बस ठीक से कनेक्ट कर सकता है:

Visual SQL Server Object Explorer can connect just fine

कनेक्शन स्ट्रिंग, के रूप में दृश्य स्टूडियो जब यह समस्या पैदा करने वाले लाइन के लिए हो जाता है से बच गए, तो मैं कनेक्शन स्ट्रिंग पता गलत तरीके से भाग निकले नहीं है:

"Data Source=(localdb)\\v13.0;Initial Catalog=MovieDB;Integrated Security=True;AttachDbFilename=|DataDirectory|\\MovieDB.mdf" 

मैं इस गाइड का पालन करने की कोशिश की (Part 1 और Part 2) और छवियों को कम से कम 4/18/2016 के रूप में तोड़ दिया गया है, इसलिए मैं पूरी तरह से समझने में सक्षम नहीं था कि मुझे क्या करना है। मैं केवल उपरोक्त त्रुटि प्राप्त करने में सक्षम है क्योंकि मैं स्थानीय सिस्टम के लिए एप्लिकेशन पूल पहचान बदल गया था:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user.

:

I was only able to get this error because I changed the app pool identity to LocalSystem

एप्लिकेशन पूल ApplicationPoolIdentity पहचान के अंतर्गत चल रहा है, मैं यह त्रुटि प्राप्त

मैं प्रोफ़ाइल लोडिंग को मजबूर करने के लिए सी: \ windows \ system32 \ inetsrv \ config \ applicationHost.config फ़ाइल को संशोधित करने के लिए अब तक चला गया हूं। अब तक कुछ भी नहीं।

<applicationPools> 
    <add name="DefaultAppPool" /> 
    <add name="Classic .NET AppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" /> 
    <add name=".NET v2.0 Classic" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" /> 
    <add name=".NET v2.0" managedRuntimeVersion="v2.0" /> 
    <add name=".NET v4.5 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" /> 
    <add name=".NET v4.5" managedRuntimeVersion="v4.0"> 
     <!-- I added this, before it was an empty node --> 
     <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" /> 
    </add> 
    <applicationPoolDefaults managedRuntimeVersion="v4.0"> 
     <!-- This was already here --> 
     <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="false" /> 
    </applicationPoolDefaults> 
</applicationPools> 

मेरा ऐप ".NET 4" के अंतर्गत चल रहा है।5 "अनुप्रयोग पूल

My app is running under the ".NET 4.5" app pool

मेरे कोड:

पृष्ठ लोड और डीबी में फिल्मों की सूची प्राप्त करने के लिए इस सेवा कॉल:

[ServiceContract] 
public interface IMovieDBService 
{ 
    // ... 

    [OperationContract] 
    List<Movie> GetMovies(int actorID); 

    // ... 
} 

public class MovieDBService : IMovieDBService 
{ 
    // ... 

    public List<Movie> GetMovies(int actorID = 0) 
    { 
     var output = new List<Movie>(); 
     using (var connection = DBTools.GetConnection(MovieDBConnectionName)) // Does not get past here; MovieDBConnection = "MovieDB" 
     { 
      var parameters = new List<SqlParameter> 
      { 
       new SqlParameter("@actorID", actorID) 
      }; 

      using (var reader = connection.ExecuteStoredProcedure("GetMovies", parameters)) 
      { 
       while (reader.Read()) 
       { 
        output.Add(new Movie 
        { 
         ID = reader.GetInt32("ID"), 
         Title = reader.GetString("Title"), 
         Year = reader.GetInt16("Year"), 
         Genre = GetGenre(reader.GetInt32("GenreID")) 
        }); 
       } 
      } 
     } 

     return output; 
    } 

    // ... 
} 

और समस्या पैदा करने वाले विधि से मेरी डीबीटूल परियोजना:

public static SqlConnection GetConnection(string connectionName) 
    { 
     var connection = new SqlConnection(); 
     var connectionString = ConfigurationManager.ConnectionStrings[connectionName]; 
     if (connectionString != null) 
     { 
      connection.ConnectionString = connectionString.ConnectionString; 
      connection.Open(); // breaks here 

      return connection; 
     } 

     return null; 
    } 

मैं केवल यह मान सकता हूं कि समस्या प्रमाणीकरण के साथ है, या तथ्य यह है कि एक आईआईएस-होस्टेड एप्लिकेशन स्थानीय डीबी उपयोगकर्ता प्रक्रिया से कनेक्ट करने का प्रयास कर रहा है, लेकिन मैंने अन्य प्रश्नों से निर्देशों का पालन करने का प्रयास किया है और असफल रहा है (संभवतः क्योंकि असली समस्या को समझने में नाकाम रहने के)। मैं एक नुकसान में हूँ ...

+0

स्थानीय डीबी _development_ के लिए है, और यह उस उपयोगकर्ता के लिए विशिष्ट है जो इसे चलाने का प्रयास कर रहा है। आप एएसपी.NET पर्यावरण में एसक्यूएल एक्सप्रेस को स्विच करने से बेहतर हो सकते हैं। –

+0

@ क्रिस बोवे अरे क्रिस। मुझे एक ही त्रुटि मिली है। मैं सोच रहा था कि आपने इसे कैसे हल किया? –

उत्तर

1

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

संबंधित मुद्दे