Laden...

Fehlermeldung XML-Datei

Erstellt von Gege vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.722 Views
G
Gege Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren
Fehlermeldung XML-Datei

Hallo,

ich bin ein wirklich blutiger Anfänger, bisher habe ich meine selbstverursachten Probleme auch selbst gelöst, nur diesmal habe ich keine Plan mehr:

Ich erhalte bei der Ausführung meines Programmes die Meldung:

"Fehler im XML-Dokument(1,2206)"
(die Zahlen wechseln manchmal)

Hintergrund:
Ich habe einen Webdienst programmiert, der eine Methode Get(einlesen nach eingegebenen Parametern) und Set(Update durchführen) zur Verfügung stellt.
Zugegriffen wird auf eine MySql Datenbank mittels des ODBC-Treibers.

In einem neuen Projekt habe ich einen Webdienstclient programmiert der in einer Form mittels Button den Datenbestand zur Anzeige in einem DataGrid aufruft.
Das funktioniert auch einwandfrei.
Wenn ich jedoch eine Änderung vornehme und den Button für die Änderung fest niederdrücke, bekomme ich oben angeführter Fehlermeldung.

Ich füge hier mal den Code der Methode und des Buttons an:


[WebMethod]
public void setBestellungen (ref DataSet bestDS)
{	
// Verbindung zur Datenbank definieren
OdbcConnection conn = new OdbcConnection("DRIVER={MySql ODBC 3.51 Driver};SERVER=localhost;DATABASE=warenkorb;USER=root;PASSWORD=teufel;OPTION=3;");

// DataAdapter erzeugen
OdbcDataAdapter da = new OdbcDataAdapter("SELECT * from bestellungen", conn);

// Absicherung das Update bei fehlerhaftem Satz nicht abgebrochen wird (Makrierung)
da.ContinueUpdateOnError = true;
			
// Sql-Anweisungen erzeugen
OdbcCommandBuilder cb = new OdbcCommandBuilder(da);
			
// los gehts
da.Update(bestDS.Tables["Bestellungen"]);
}

\================================================
private localhost.Bestellungen ws = new localhost.Bestellungen();
private DataSet ds1 = new DataSet();


private void button2_Click(object sender, System.EventArgs e)
{
// lokales Dataset zum Puffern der Änderungen
DataSet ds2;
				
try
{
// Änderungen feststellen
ds2 = ds1.GetChanges();
				
// Übertragung erfolgt nur wenn Änderungen vorhanden
if (ds2 != null)						
{
ws.setBestellungen(ref ds2); 
// Die in ds2 als Referenz zurückgegebenen Daten überschreiben das Original ds1
ds1.Merge(ds2);
MessageBox.Show("Daten erfolgreich gespeichert");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "oh gott");
}
}

Für eine Antwort wäre ich sehr dankbar, weil ich wirklich nicht mehr weiter weis.

Frohe Weihnachten !

D
279 Beiträge seit 2004
vor 19 Jahren

Ich denke nicht, dass an am Code des server oder des Clients liegt, sondern eher an einer fehlerhaften oder nicht ausreichenden Dienstbeschreibung. Kann mich aber auch täuschen.

Hast du das WSDL und die Proxy Klasse von Visual Studio generieren lassen?
Schau dir doch mal das WSDL-Dokument an, ob dort alles korrekt ist (je nach Komplexität des Webdienste kann das aber natürlich ziemlich viel Arbeit sein).
Vielleicht kannst du ja auch mal ein externes Tool nutzen. Von Thinktecture gibt es hier etwas nettes.

G
Gege Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren

ja, die WSDL und die Proxyklasse wurden von Visual Studio generiert.

Die WSDL habe ich mir angesehen, ich kann aber damit nichts anfangen.

Vielleicht sollte ich diesen Download probieren, was ich muss ich dann in der Anwendung damit tun ?

D
279 Beiträge seit 2004
vor 19 Jahren

Wie groß ist denn die Funktionalität die dein Webservice bereitstellt?
Je nach Größe kann es nämlich recht viel Arbeit sein.

Mit dem Tool kannst du ziemlich einfach Web-Services nach dem Contract-First Schema erstellen. Das heißt du lässt dir nicht di WSDL-Dokuemnte und die Proxy-Klasse von VS.NET aus dem Code kreiren (dort ist ohnehin recht viel unnützes Zeug drin 😃), sondern erstellst erst ein XML-Schema mit den benötigten Datentypen und lässt dir daraus dann das WSDL Dokument und letztendlich den Code generieren.

Ein Beispiel dazu findest du hier

Ich habe dein Szenario gerade bei mir nachgestellt (mit DataSet als ref übergeben und updaten, usw.) und es hat hier wunderbar funktioniert. (Mit dem vom VS generiertem Dateien). Es wird also mit den Daten des DataSets zutun haben.

Du solltest deshalb bevor du es mit dem Tool versuchst, erst einmal mit einem typisierten DataSet probieren.

G
Gege Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren

Habe ein DataSet typisiert und eingebaut, hat auch nicht geholfen, die Fehlermeldung kommt nach wie vor. Probiere es jetzt mal mit dem Download.

Vielen Dank für deine Hilfe.

G
Gege Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren

ich glaube das problem liegt darin begraben, das mein Webservice keine .vsdisco Datei hat, aus welchen Gründen auch immer .......

D
279 Beiträge seit 2004
vor 19 Jahren

eine disco-Datei hat nichts mit dem Webdienst an sich zutun, sondern hilft nur bei der Bereitstellung bzw. der Veröffentlichung von diesem.

In ihr sind unter anderem die URL's zu der/den WSDL Datein des/der Webdienste gesammelt. Sie hat also nichts mit der Funktionalität des Webservices zutun.
Daran kanns denke ich nicht liegen 😃

G
Gege Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren

ich bin momentan so verzweifelt, das ich einfach alles deinstalliere und neu installiere, dann werde ich das nochmal eingeben und durchdenken, gib auf jedenfall Bescheid und vielen Dank für deine Mühen.

D
279 Beiträge seit 2004
vor 19 Jahren

Hast du es schonmal mit etwas anderes als einem DataSet oder mit einer anderen Tabelle/Datenbank versucht? Oder das DataSet mal als XML zu serialisieren und dort hineinzuschauen?

G
Gege Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren

das werde ich heute probieren, mal ganz harmlos auf eine Access-Datenbank.
Ich gebe auf jedenfall hier Bescheid.

Vielen Dank für deine Mühe.

G
Gege Themenstarter:in
22 Beiträge seit 2004
vor 19 Jahren

Habs heute mit einer ACCESS Datenbank versucht, genau die gleiche Fehlermeldung. Vielleicht darf die C# Standard Edition keinen Webclient erzeugen.

N
4.644 Beiträge seit 2004
vor 19 Jahren

@GeGe
Hast Du das Problem gelöst, denn wir haben es auf Arbeit auch?
Mir scheint, als tritt der Fehler nur auf, wenn man ein DataSet oder eine DataTable zurückgibt.

[edit] Bei uns liegt das Problem an der Datenbank, denn ein Testlauf mit Northwind funktionierte einwandfrei.