|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jun 2012
Messaggi: 16
|
[C# - MYSQL] Usare Database da webservice
Ciao a tutti. Come da titolo, il mio problema riguarda l'utilizzo di un Database (scritto in SQL e memorizzato utilizzando MySql) da un webservice che ho creato io.
Durante la fase di debug, in locale, tutto funziona perfettamente (ho dotato il web service di un metodo di inserimento dati e un metodo che effettua una query), ma una volta che ho pubblicato il web service su un sito, i metodi non funzionano più.. Come posso fare? Di seguito vi posto il codice, nel caso possa essere utile per meglio intendere il problema: Service1.asmx.cs: Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using MySql.Data.MySqlClient; namespace WebService1 { /// <summary> /// Descrizione di riepilogo per Service1 /// </summary> [WebService(Namespace = "http://ocrwebservice.somee.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // Per consentire la chiamata di questo servizio Web dallo script utilizzando ASP.NET AJAX, rimuovere il commento dalla riga seguente. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public string InsertIntoDB(string latitudine, string longitudine, string testo) { DBConnect dbObject = new DBConnect(); string result; result = dbObject.Insert(latitudine, longitudine, testo); return result; } [WebMethod] public string Testing(string latitudine, string longitudine, string testo) { DBConnect dbObject = new DBConnect(); string result; result = dbObject.Test(latitudine, longitudine, testo); return result; } } } Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using MySql.Data.MySqlClient; namespace WebService1 { public class DBConnect { private MySqlConnection connection; private string server; private string database; private string uid; private string password; //Costruttore public DBConnect() { Initialize(); } //Inizializzazione dei valori private void Initialize() { string connectionString; server = "localhost"; database = "cartellodb"; uid = "OCRUser"; password = "admin"; connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; connection = new MySqlConnection(connectionString); } private bool OpenConnection() { try { connection.Open(); return true; }catch (MySqlException e) { switch (e.Number) { case 0: Console.WriteLine("Impossibile connettersi al server"); break; case 1045: Console.WriteLine("Password/username non validi. Riprovare"); break; } return false; } } private bool CloseConnection() { try { connection.Close(); return true; }catch (MySqlException e){ Console.WriteLine(e.Message); return false; } } public string Insert(string lat, string lon, string text) { string query = "INSERT INTO Cartello VALUES (" + lat + "," + lon + ",'" + text + "');"; //apertura connessione if (this.OpenConnection() == true) { //creazione ed istanziazione comando ed assegnazione della query e della connessione al comando MySqlCommand cmd = new MySqlCommand(query, connection); //esecuzione query cmd.ExecuteNonQuery(); } this.CloseConnection(); return "Inserimento dati completato con successo"; } public string Test(string lat, string lon, string text) { string query = "SELECT * FROM Cartello WHERE latitude = " + lat + " AND longitude = " + lon + " AND testo = '" + text + "';"; string result = "", queryResult = ""; //apertura connessione if(this.OpenConnection() == true) { //creazione ed istanziazione comando ed assegnazione della query e della connessione al comando MySqlCommand cmd = new MySqlCommand(query, connection); //creazione ed istanziazione del Data Reader che conterrà il risultato della query alla tabella MySqlDataReader dataReader = cmd.ExecuteReader(); while(dataReader.Read()) queryResult = dataReader.GetString(0); if(queryResult.CompareTo("") == 0) result = "NOTEXISTS"; else result = "EXISTS"; dataReader.Close(); this.CloseConnection(); } return result; } } } Dimenticavo: ho già installato un connector .NET/MySql, precisamente la versione 6.6.4 Ultima modifica di seriud89 : 23-04-2013 alle 15:08. Motivo: edit |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Per aiutarti servirebbe per lo meno sapere l'errore che ottieni non ti pare?
Sicuro che la connessione al db sia giusta? Ad esempio anche dove pubblichi il db è sulla stessa macchina del webservice? Perchè non utilizzi il web.config per la stringa di connessione, invece che cablarla nel codice? |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Jun 2012
Messaggi: 16
|
Errori non ne ottengo. Nel metodo di testing dovrei ottenere in output una stringa "EXISTS" oppure "NOTEXISTS", ma tutto ciò che ottengo è una stringa vuota. Nel metodo di inserimento di una nuova riga al db, lo stesso, non ottego errori, ma non viene inserito nessun elemento.
La connessione dovrebbe essere giusta, altrimenti neanche in modalità debug in locale avrebbe funzionato. Il web service si trova pubblicato su un servizio di hosting, mentre il db si trova sulla mia macchina. Ho scritto la connessione al db tramite il codice perchè ho trovato solo tutorial che mi spiegavano di procedere in questo modo. Grazie |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Poi ci vedo problemi di firewall devi aprire la porta 3306 sul tuo modem/router locale. Non vedi quello che ti aspetti perchè OpenConnection() ritorna sicuramente sempre false quindi salta completamente il tuo codice. |
|
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Jun 2012
Messaggi: 16
|
Al posto di "localhost" cosa dovrei inserire per fare in modo che funzioni?
Ti ringrazio molto per il tuo aiuto |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Jun 2012
Messaggi: 16
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Mar 2009
Messaggi: 257
|
ma perchè non metti la connessione al db nel web.config? esiste un sito: http://connectionstrings.com/ che genera le stringhe di connessione a qualsiasi database.
dopo di che metti la riga nella sezione ad esempio <connectionStrings> <add name="connessione_db" connectionString="Data Source=mio-indirizzo-database;Initial Catalog=nome_db;Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings> |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Mar 2009
Messaggi: 257
|
e se commenti ad esempio nella insert la if
if (this.OpenConnection() == true) forzi il metodo alla scrittura, così vedi l'errore (ma nel web.config devi avere customerrors=Off). altrimenti non c'è connessione e le istruzioni di insert vengono ignorate... non vedrai mai qual è il problema. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:18.