Hi, I've a web service example, called Service1.asmx, that contains four methods. The example works well on Windows, but when I try to execute it on Mono I have some problems , particularly when I invoke the "SessioneAttiva" method, I obtain this error:
"The remote server returned an error: (500) Internal Server Error. Unable to retreive error information from ODBC driver manager" What it means? Please help me. I've Fedora Core 2, Mono 1.01 and I use a mysql database (4.1.3-beta-standard) via unixOdbc (2.2.8). Thanks, Valentina.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Data.Odbc;
namespace ServiceTdProva
{
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
InitializeComponent();
}
#region Component Designer generated code
private IContainer components = null;
private void InitializeComponent()
{
}
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
string DataOdierna=DateTime.Today.Year.ToString() +"-"+ DateTime.Today.Month.ToString() +"-"+ DateTime.Today.Day.ToString();
public string CatchProblema()
{
string problema="0";
//OdbcConnection conn = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=TdMio;"+"UID=root;"+"PASSWORD=rootpwd;");
OdbcConnection conn = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=tdmio;UID=root;PASSWORD=rootpwd;");
OdbcDataReader dbReader = null;
conn.Open();
OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "Select CodiceProblema from problemi where Data='"+DataOdierna+"'";
dbReader = cmd.ExecuteReader();
while(dbReader.Read())
{
problema =(string)dbReader["CodiceProblema"];
}
dbReader.Close();
conn.Close();
return problema;
}
[WebMethod (EnableSession=true)]
public string LogIn(string UserIdInput, string PasswordInput)
{
//OdbcConnection conn = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=TdMio;"+"UID=root;"+"PASSWORD=rootpwd;");
OdbcConnection conn = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=tdmio;UID=root;PASSWORD=rootpwd;");
OdbcDataReader dbReader = null;
conn.Open();
OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "Select * from utenti where UserID='"+UserIdInput+"' and Password='"+PasswordInput+"'";
dbReader = cmd.ExecuteReader();
if(dbReader.Read())
{
string Gruppo = (string)dbReader["Gruppo"];
string Utente = (string)dbReader["CodiceUtente"];
Session.Add("Utente",Utente);
Session.Add("Gruppo",Gruppo);
dbReader.Close();
conn.Close();
return (string)Session["Gruppo"];
}
else
{
dbReader.Close();
conn.Close();
return "Errore";
}
}
/*######################################################################################################*/
[WebMethod (EnableSession=true)]
public void LogOut()
{
Session.RemoveAll();
}
/*######################################################################################################*/
[WebMethod (EnableSession=true)]
public string NuovaSessione()
{
string problema = CatchProblema();
int massimo=0;
//Se l'utente �stato indentificato ed �un pianificatore allora pu�aprire una nuova sessione
if ((Session["Utente"]!= null)&((string)Session["Gruppo"]=="G1"))
{
//controllo che l'utente non abbia gi�una sessione attiva
//OdbcConnection conn = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=tdmio;"+"UID=root;"+"PASSWORD=rootpwd;");
OdbcConnection conn = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=tdmio;UID=root;PASSWORD=rootpwd;");
OdbcDataReader dbReader = null;
conn.Open();
OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "Select * from sessione where Utente ='"+(string)Session["Utente"]+"'and Stato='Attiva'";
dbReader = cmd.ExecuteReader();
if(dbReader.Read())
{
//si allora comunico l'errore perch�non possono essere contemporaneamente attive 2 sessioni
string stringa="l'utente" +(string)Session["Utente"]+ "ha gi�una sessione attiva, non �possibile aprirne altre!";
dbReader.Close();
conn.Close();
return stringa;
}
else
{
//no allora apro una nuova sessione
dbReader.Close();
conn.Close();
OdbcConnection con =null;
OdbcConnection connessione=null;
//con = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=tdmio;"+"UID=root;"+"PASSWORD=rootpwd;");
con = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=tdmio;UID=root;PASSWORD=rootpwd;");
con.Open();
OdbcCommand command = con.CreateCommand();
OdbcCommand commandSessione = con.CreateCommand();
commandSessione.CommandText= "select * from sessione where CodiceSessione=1";
dbReader= commandSessione.ExecuteReader();
if (dbReader.Read())
{
dbReader.Close();
//recupero il codice dell'ultima sessione
command.CommandText = "Select max(CodiceSessione)as CodiceSessione from sessione";
dbReader = command.ExecuteReader();
while(dbReader.Read())
{
massimo = (int)dbReader["CodiceSessione"];
}
dbReader.Close();
con.Close();
}
//�la prima tupla della tabella non esiste massimo
else massimo=0;
con.Close();
try
{
object Sessione;
Sessione=massimo+1;
Session["Sessione"]=Sessione ;
//ed inserisco la tupla per la nuova sessione
//connessione = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=tdmio;"+"UID=root;"+"PASSWORD=rootpwd;");
connessione = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=tdmio;UID=root;PASSWORD=rootpwd;");
connessione.Open();
OdbcCommand comd = new OdbcCommand("Insert into sessione (CodiceSessione, Problema, Stato, Utente) values ('"+(int)Session["Sessione"]+"','"+problema+"','Attiva','"+(string)Session["Utente"]+"')", connessione);
comd.ExecuteNonQuery();
}
catch (OdbcException odbe)
{
return odbe.Message;
}
finally
{
if (connessione!=null)
{
connessione.Close();
}
}
return "SI";
//l'utente ha aperto una nuova sessione quindi ritorno "Si"
}
}
else return "NO";
//l'utente non pu�accedere a quest'area allora torno "no"
}
/*################################################################################################*/
//3)Visualizza la sessione attiva
[WebMethod (EnableSession=true)]
public DataSet SessioneAttiva()
{
string query = "select* from sessione where Utente = '"+(string)Session["Utente"]+"' and Stato='Attiva'";
//OdbcConnection conn = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=TdMio;"+"UID=root;"+"PASSWORD=rootpwd;");
OdbcConnection conn = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=tdmio;UID=root;PASSWORD=rootpwd;");
OdbcDataReader dbReader = null;
OdbcCommand comd = new OdbcCommand(query, conn);
conn.Open();
dbReader = comd.ExecuteReader();
//se non c'�una sessione attiva dell'utente connesso
if(!dbReader.Read())
{
conn.Close();
DataSet Ds = new DataSet();
//visualizzo una stringa
//OdbcConnection con = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=Login;"+"UID=root;"+"PASSWORD=rootpwd;");
OdbcConnection con = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=login;UID=root;PASSWORD=rootpwd;");
OdbcDataAdapter ErTabella = new OdbcDataAdapter("select * from errore where IdErrore= 'E3'", con);
conn.Open();
ErTabella.Fill(Ds);
con.Close();
return Ds;
}
else
{
//atltrimenti visualizza la sessione attiva
conn.Close();
//OdbcConnection con = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};"+"SERVER=localhost;"+"DATABASE=tdmio;"+"UID=root;"+"PASSWORD=rootpwd;");
OdbcConnection con = new OdbcConnection ("DRIVER=MySQL;SERVER=localhost;DATABASE=tdmio;UID=root;PASSWORD=rootpwd;");
DataSet Ds = new DataSet();
OdbcDataAdapter daTabella = new OdbcDataAdapter(query, conn);
daTabella.Fill(Ds, "sessione");
dbReader.Close();
con.Close();
return Ds;
}
}
}
}
Service1.asmx
Description: Binary data
