Hallo zusammen,
ich habe mit c# einen Webservice erstellt (DLL). Die DLL im "bin"-Verzeichnis abgelegt und eine passende config und asmx Datei erstellt. Läuft alles wunderbar!
NUR:
Ich kann keine SQL-Verbindung zum MySQL-Server auf dem Ubuntu-System aufbauen!
Folgender Fehler kommt:
System.Data.SqlClient.SqlException: Server does not exist or connection refused. ---> Mono.Data.Tds.Protocol.TdsInternalException: Server does not exist or connection refused
...
Folgenden Code benutze ich:
public string[] xDBgetAccountdata(int xaccountid)
{
//Variablen
string[] xrueckgabe = { };
string connectionString = "Server=" + this.xhost + ";" + "Database=" + this.xdb + ";" + "User ID=" + this.xuser + ";" + "Password=" + this.xpw + ";";
IDbConnection dbcon;
using (dbcon = new SqlConnection(connectionString))
{
dbcon.Open();
using (IDbCommand dbcmd = dbcon.CreateCommand())
{
string sql = "SELECT * FROM xaccount WHERE accountid=" + xaccountid;
dbcmd.CommandText = sql;
using (IDataReader xreader = dbcmd.ExecuteReader())
{
while (xreader.Read())
{
xrueckgabe[0] = xreader["id"].ToString();
xrueckgabe[1] = xreader["accountid"].ToString();
xrueckgabe[2] = xreader["user"].ToString();
xrueckgabe[3] = xreader["pw"].ToString();
xrueckgabe[4] = xreader["db"].ToString();
}
}
}
dbcon.Close();
}
//Rückgabe
return xrueckgabe;
}
Wäre super, wenn mir jemand helfen könnte, dan was das liegen kann!?!?
Liegt das an meinem Code oder an der Konfiguration des Servers?
Danke und Grüße Bench
MySql?
Und dann benutzt du SqlConnection?
Und ausserdem ist dieser Code genau so wie man ihn nicht schreiben sollte.
Hi,
kann denn eine Verbindung mit dem Server hergestellt werden?
Mal ein Ping versucht bzw. eine Verbindung mit einem anderen Client
(HeidiSql, Database Brower, etc) versucht?
Und wo ich mir das grad nochmal durchlese:
Bist du dir sicher, dass man mit der SqlConnection sich mit einem MySQL Server
verbinden kann?
Ich habe dafür immer den ADO.NET Adapter von MySQL verwendet. Damit gab es nie Probleme.
Gruß SkySurfer
Es gibt 11 Arten von Menschen:
Danke für die rache Antwort!
Könnt ihr mir ein Beispiel posten wie ich das richtig mache!
Nur eine Anregung !!!
Bin hier noch nicht so fit!
Danke
Also den Connector bekommst du hier : MySQL ADO.NET Connector
Ein ganz brauchbares Beispiel gibt es hier : MySQL .NET With C#
Es gibt 11 Arten von Menschen:
Jetzt habe ich es so!
public string[] xDBgetAccountdata(int xaccountid)
{
//Variablen
string[] xrueckgabe = { };
string connectionString = "Data Source=" + this.xhost + ";" + "Persist Security Info=yes;" + "Database='" + this.xdb + "';" + "UserId=" + this.xuser + ";" + "PWD=" + this.xpw + ";";
MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM xaccount WHERE accountid=" + xaccountid;
MySqlDataReader xreader;
connection.Open();
xreader = command.ExecuteReader();
while (xreader.Read())
{
xrueckgabe[0] = xreader["id"].ToString();
xrueckgabe[1] = xreader["accountid"].ToString();
xrueckgabe[2] = xreader["user"].ToString();
xrueckgabe[3] = xreader["pw"].ToString();
xrueckgabe[4] = xreader["db"].ToString();
}
connection.Close();
//Rückgabe
return xrueckgabe;
}
und dann kommt der Fehler am Server:
System.InvalidProgramException: Missing or incorrect header for method xDBgetAccountdata
Was hat das nu wieder zu bedeuten?
Muss ic hier noch was machen!?
Liegt das an using MySql.Data.MySqlClient;?
Danke und Grüße
Fehlt vielleicht der Verweis auf die MySQL Connector DLL?
Es gibt 11 Arten von Menschen:
Nein, den habe ich im Project schon eingebunden!
Ich kann die Klassenbib. auch ohne Fehler kompeilieren!
Auf dem Server müsste ich doch dann eigentlich nichts merh einstellen!?
Hast du alle zugehörigen Dateien des MySQL Connectors auf den Server deployed ?
Es gibt 11 Arten von Menschen:
Nein, wie geht das?
Boa, sorry für die Anstrengung!
Aber ich habe mit Webapplicationen noch keine so ne Ahnung!
Muss ich die auch in das BIN-Verzeichnis legen wo meine DLL liegt oder wie mach ich das?
Der Server ist angemietet!!!! Ich kann hier nichts dran ändern!?
Hallo,
wir können auch nur raten ? ;:-)
hast du in deinem Webservice auch das Attribute "[WebMethod]" gesetzt ?
Wirf die Dateien in das gleiche Verzeichnis wie deine DLL hier sollte auch gesucht werden wenn Sie im GAC nicht gefunden werden.
Es gibt 11 Arten von Menschen:
Hier meine drei Klassen:
using System;
using System.Web.Services;
namespace XNWebdienstvakanza
{
[WebService(Namespace = "http://webservice.ais2000.de/")]
public class XWebdienstvakanza : WebService
{
/// <summary>
/// Methode "Hallo Vakanza"
/// </summary>
/// <returns></returns>
[WebMethod]
public string sayHelloVakanza()
{
return "Hello Vakanza";
}
[WebMethod]
public string[] getUserData(int accountid)
{
//Config aufrufen
XConfig xconfig = new XConfig();
xconfig.xgetAccountData(accountid);
//Daten in ein Array Speichern
string[] xuserdata = { xconfig.getXuser(), xconfig.getXpw(), xconfig.getXdb() };
//Rückgabe
return xuserdata;
}
}
}
Dann meine Helperklassen Config und DBhandler
using System;
using MySql.Data.MySqlClient;
namespace XNWebdienstvakanza
{
/// <summary>
/// DB Handler
/// </summary>
class XDBhandler
{
//Variabeln
private string xhost = "***"; // Hier halt dann die richtigen Daten
private string xuser = "***";
private string xpw = "***";
private string xdb = "***";
/// <summary>
/// Holt die Accountdaten
/// </summary>
/// <param name="xaccountid"></param>
/// <returns></returns>
public string[] xDBgetAccountdata(int xaccountid)
{
//Variablen
string[] xrueckgabe = { };
string connectionString = "Data Source=" + this.xhost + ";" + "Persist Security Info=yes;" + "Database='" + this.xdb + "';" + "UserId=" + this.xuser + ";" + "PWD=" + this.xpw + ";";
MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM xaccount WHERE accountid=" + xaccountid;
MySqlDataReader xreader;
connection.Open();
xreader = command.ExecuteReader();
while (xreader.Read())
{
xrueckgabe[0] = xreader["id"].ToString();
xrueckgabe[1] = xreader["accountid"].ToString();
xrueckgabe[2] = xreader["user"].ToString();
xrueckgabe[3] = xreader["pw"].ToString();
xrueckgabe[4] = xreader["db"].ToString();
}
connection.Close();
//Rückgabe
return xrueckgabe;
}
}
}
using System;
namespace XNWebdienstvakanza
{
class XConfig
{
//Globale Variabeln
private string xuser = "";
private string xpw = "";
private string xdb = "";
/// <summary>
/// Setzt die Accountdaten
/// </summary>
/// <param name="accountid"></param>
public void xgetAccountData(int accountid)
{
//Db Handler
XDBhandler xdb = new XDBhandler();
string[] xaccountdaten = xdb.xDBgetAccountdata(accountid);
//Daten global zur Verfügung stellen
this.xuser = xaccountdaten[2];
this.xpw = xaccountdaten[3];
this.xdb = xaccountdaten[4];
}
/// <summary>
/// Gibt username zurück
/// </summary>
/// <returns></returns>
public string getXuser()
{
return this.xuser;
}
/// <summary>
/// Gint das PW zurück
/// </summary>
/// <returns></returns>
public string getXpw()
{
return this.xpw;
}
/// <summary>
/// Gint die Datenbank zurück
/// </summary>
/// <returns></returns>
public string getXdb()
{
return this.xdb;
}
}
}
Muss ich auch in meinen Helferklassen die Webmethod setzten und die Klasse von Webservice ableiten!?
Nur Methoden die von deinem WebService bereit gestellt werden sollen
benötigen das WebMethod Attribut
Es gibt 11 Arten von Menschen:
DAAAAAAAANKKKKEE!
Es geht!!!
Folgendes war:
> DLL hat im bin-Verzeichnis des Webservice gefehlt!
> Auf dem Server läuft nur Framework 2.0 und nocht 4.0!!!.-(((
Naja, jetzt gehts!!
Danke für die Hilfe
Du kommst bestimmt von Java,oder?
Der Code sieht immer noch schlecht aus.
HI,
😃 Ja, ich komme von Java! 😃
Danke für die Tips!
Ich werde den Code natürlich noch optimieren!
Mir ging es jetzt nur mal darum, ob es vom Prinzip her so funtioniert, wie ich es mir vorstelle!
Ein Lob an das Froum!!!
Das geht hier wirklich alles super schnell!
Super Community!!!!
Danke und bis bald 😃!!
Gruß
Ich werde den Code natürlich noch optimieren!
Glaube ich nicht, denn nichts ist beständiger als das Provisorium oder
code der "Funktioniert doch".
Mach es lieber gleich richtig, geht ausserdem auch schneller und sauberer als das was Du gemacht hast.