seriud89
23-04-2013, 14:53
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:
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;
}
}
}
DbConnect.cs :
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;
}
}
}
Grazie mille a tutti
Dimenticavo: ho già installato un connector .NET/MySql, precisamente la versione 6.6.4
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:
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;
}
}
}
DbConnect.cs :
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;
}
}
}
Grazie mille a tutti
Dimenticavo: ho già installato un connector .NET/MySql, precisamente la versione 6.6.4