20 messaggi dal 25 novembre 2006
Il problema si è presentato in una applicazione ASP.NET MVC5 ma ho ridotto il tutto ad una più semplice console application (ho usato l'esempio del tutorial Code First che si trova nella MSDN).

Premessa : sulla macchina virtuale con VS2013 che stò usando non è installato (volutamente) SQL Server.

Finchè uso la connessione di default ("mssqllocaldb") funziona.

Poi, modificando App.Config per connettere un Sql Server 2008 R2 installato su un'altra macchina, niente da fare.

Il Server Sql è normalmente visibile e consultabile dalla finestra "SQL Server Object Explorer" di VS2013 (quindi ho escluso i problemi legati all'accesso ed ai diritti).

Qualcuno ha suggerimenti ?

Grazie in anticipo.
Paolo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo,

dcube ha scritto:

quindi ho escluso i problemi legati all'accesso ed ai diritti

Tuttavia, dev'esserci un problema con la connection string o può darsi che il protocollo TCP/IP non sia stato abilitato.
Che errore ottieni, esattamente, quando lanci il debug dell'applicazione?

Entity Framework dialoga con il database per mezzo delle classi di un provider ADO.NET, quindi avresti lo stesso problema anche collegandoti direttamente con una SqlConnection.

ciao,
Moreno

Enjoy learning and just keep making
20 messaggi dal 25 novembre 2006
Ciao Moreno,

questo è l'errore :
Si è verificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato in modo da consentire connessioni remote. (provider: SQL Network Interfaces, error: 26 - Errore nell'individuazione del server/dell'istanza specificata)

App.Config :
<connectionStrings>
<add name="DefaultConnection"
providerName="System.Data.SqlClient"
connectionString="Data Source=SV8-DDD\SQLEXPRESS;Initial Catalog=ConsoleEF_PoiLoButto;Integrated Security=False;User Id=sa;Password=xxx;MultipleActiveResultSets=True" />
</connectionStrings>

Grazie e ciao
Paolo
Modificato da dcube il 21 dicembre 2014 23.13 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo,

Ok, siamo in una situazione in cui ci sono due indizi discordanti: da un lato, c'è Visual Studio che riesce a collegarsi normalmente mentre, dall'altro, c'è questo errore che indica chiaramente che la connessione non è potuta avvenire.

dcube ha scritto:

Il server non è stato trovato o non è accessibile.


Non penso si tratti di una questione di privilegi, altrimenti avresti avuto un errore diverso. Per ora vediamo dove ci portano i suggerimenti che trovi nell'errore stesso.
  • Verificare che il nome dell'istanza sia corretto

    Questo è abbastanza facile da verificare: devi solo assicurarti che non ci siano errori di digitazione.
    Solo se hai una connection string anche nel codice C#, fai attenzione perché in quel caso il backslash è considerato un carattere speciale e quindi andrebbe raddoppiato. Ma non credo che sia il tuo caso, perché hai mostrato che la tua connection string si trova nell'app.config, e non in codice C#.
  • e che SQL Server sia configurato in modo da consentire connessioni remote
    Come suggerito, dovresti controllare se il protocollo TCP/IP è stato abilitato per la tua installazione di Sql Express. Segui questa guida. So che sembra superfluo dato che da Visual Studio funziona ma tanto vale controllare, almeno riusciamo ad escluderla delle cause.
    http://support.webecs.com/kb/a868/how-do-i-configure-sql-server-express-to-allow-remote.aspx
    Già che sei nel server, cerca di capire su che porta TCP è in ascolto quella particolare istanza. Puoi scoprirlo anche con il seguente comando, soprattutto se hai configurato una porta dinamica.
    netstat -onab

    Dopo aver verificato che il protocollo TCP/IP è attivo e aver scoperto la porta TCP sulla quale l'istanza è in ascolto, torna sul client e lancia un ping per controllare che l'IP restituito sia corretto.

    ping SV8-DDD

    Controllato che anche la risoluzione del nome è corretta, prova a modificare la tua connection string così, esplicitando la porta TCP.

    <add name="DefaultConnection"
    providerName="System.Data.SqlClient"
    connectionString="Data Source=SV8-DDD\SQLEXPRESS, numeroportaTCP;Initial Catalog=ConsoleEF_PoiLoButto;Integrated Security=False;User Id=sa;Password=xxx;MultipleActiveResultSets=True" />

    Così la tua applicazione dovrebbe provare a collegarsi direttamente, senza passare prima per il sql browser.
    Se così dovesse funzionare, allora il problema potrebbe essere proprio il Sql Browser. O meglio, una regola di firewall che sta impedendo alla tua applicazione di scoprire da sola su che porta TCP si trova l'istanza.


ciao,
Moreno
Modificato da BrightSoul il 22 dicembre 2014 14.35 -

Enjoy learning and just keep making
20 messaggi dal 25 novembre 2006
Ciao Moreno,

grazie per i suggerimenti, sto controllando l'installazione del mio SQL perchè c'è qualcosa che non mi torna, per esempio manca a menu la possibilità di richiamare il "SQL Server Configuration Manager".
Forse la cosa + veloce è disinstallare e reinstallare SQL.

Dopodichè riprovo facendo anche i controlli che mi suggerivi.

Per il momento grazie e buone feste.

Paolo
20 messaggi dal 25 novembre 2006
Ciao Moreno,

come anticipato nel post precedente sulla macchina fisica ho installato da nuovo SQL Express 2008 R2 (veramente ho sono passato ad un disco SSD e ho reinstallato tutto da capo).
Questo ha permesso di eseguire SQL Server Configuration Manager e configurare i protocolli di comunicazione SQL come da tuo link.

Dalla VM di sviluppo (che invece è rimasta la stessa) come prima sia VS2013 sia SQL Server Manager Studio accedono ad SQL senza problemi (sia usando l'utente sa, sia usando il mio account di dominio aggiunto come amministratore durante l'installazione del SQL).

A questo punto ho cambiato il nome della macchina nella connectionString del file APP.CONFIG e fiducioso ho eseguito il programma di test ... grrr niente da fare!

Mi sono letto questo articolo MSDN http://msdn.microsoft.com/it-it/data/jj592674.aspx e ho sperimentato alcune modifiche partendo sempre dalla versione iniziale :

VARIANTE 1 *** FUNZIONA
ho aggiunto il costruttore alla classe che deriva da DbContext :
public BloggingContext(string connString) 
    : base(connString) 
    {}

..... e istanziata la classe in questo modo :

using (var db = new BloggingContext("DefaultConnection"))


VARIANTE 2 *** NON FUNZIONA
continuando la lettura c'è scritto che se nel file APP.CONFIG il name della connectionString è uguale al nome della classe, il DbContext la carica automaticamente. NADA non funziona.


VARIANTE 3/4 *** FUNZIONA
ho aggiunto il costruttore void alla classe che deriva da DbContext richiamando il costruttore che accetta il name della connectionString :

public BloggingContext() 
    : base("BloggingContext" oppure "name=BloggingContext") 
    {}

"BloggingContext" può essere anche "PIPPO" o "PLUTO" l'importante è che esista nella sezione <connectionStrings> del file APP.CONFIG.

*-*-*-*-*-*

Ora sto lottando con i diritti d'accesso:
se nella connectionString uso sa funziona, se invece uso il mio account di dominio non funziona, se invece uso SQL Server Manager Studio con il mio account mi fa accedere come amministratore; anche se confrontando i diritti concessi a sa con i miei ci sono delle differenze ?!. ... Indagherò (accetto anche dritte o link) ...

Partendo dal fatto che non mi piace inserire login/password nel file di testo APP.CONFIG, mi chiedevo se c'è un modo (già pronto  ) per autenticarsi interattivamente ad una connessione (in alternativa via codice) e passare un oggetto già pronto a DbContext.

Come sempre grazie 1000 in anticipo.

Saluti Paolo
1.492 messaggi dal 27 dicembre 2005
dcube ha scritto:
Ciao Moreno,

come anticipato nel post precedente sulla macchina fisica ho installato da nuovo SQL Express 2008 R2 (veramente ho sono passato ad un disco SSD e ho reinstallato tutto da capo).
Questo ha permesso di eseguire SQL Server Configuration Manager e configurare i protocolli di comunicazione SQL come da tuo link.

Dalla VM di sviluppo (che invece è rimasta la stessa) come prima sia VS2013 sia SQL Server Manager Studio accedono ad SQL senza problemi (sia usando l'utente sa, sia usando il mio account di dominio aggiunto come amministratore durante l'installazione del SQL).

A questo punto ho cambiato il nome della macchina nella connectionString del file APP.CONFIG e fiducioso ho eseguito il programma di test ... grrr niente da fare!

Mi sono letto questo articolo MSDN http://msdn.microsoft.com/it-it/data/jj592674.aspx e ho sperimentato alcune modifiche partendo sempre dalla versione iniziale :

VARIANTE 1 *** FUNZIONA
ho aggiunto il costruttore alla classe che deriva da DbContext :
public BloggingContext(string connString) 
    : base(connString) 
    {}

..... e istanziata la classe in questo modo :

using (var db = new BloggingContext("DefaultConnection"))


VARIANTE 2 *** NON FUNZIONA
continuando la lettura c'è scritto che se nel file APP.CONFIG il name della connectionString è uguale al nome della classe, il DbContext la carica automaticamente. NADA non funziona.


VARIANTE 3/4 *** FUNZIONA
ho aggiunto il costruttore void alla classe che deriva da DbContext richiamando il costruttore che accetta il name della connectionString :

public BloggingContext() 
    : base("BloggingContext" oppure "name=BloggingContext") 
    {}

"BloggingContext" può essere anche "PIPPO" o "PLUTO" l'importante è che esista nella sezione <connectionStrings> del file APP.CONFIG.

*-*-*-*-*-*

Ora sto lottando con i diritti d'accesso:
se nella connectionString uso sa funziona, se invece uso il mio account di dominio non funziona, se invece uso SQL Server Manager Studio con il mio account mi fa accedere come amministratore; anche se confrontando i diritti concessi a sa con i miei ci sono delle differenze ?!. ... Indagherò (accetto anche dritte o link) ...

Partendo dal fatto che non mi piace inserire login/password nel file di testo APP.CONFIG, mi chiedevo se c'è un modo (già pronto  ) per autenticarsi interattivamente ad una connessione (in alternativa via codice) e passare un oggetto già pronto a DbContext.

Come sempre grazie 1000 in anticipo.

Saluti Paolo
20 messaggi dal 25 novembre 2006
Scusa ma non trovo la risposta, vedo solo la quota del mio messaggio.

Ciao
Paolo

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.