Ich habe einen WCF-Dienst geschrieben und möchte diesen mit einer einfachen WinForm-Anwendung testen. Ich habe es mit dem in VS 2008 integrierten WCFTextClient probiert, aber dieser unterstützt scheinbar meine Methoden nicht.
Ich erhalte die folgende Fehlermeldung:
"System.ServiceModel.CommunicationException: Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt.. ---> System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt.. bei System.Net.HttpWebRequest.GetResponse()"
Ich habe nach dieser Fehlermeldung gegooglet aber nichts Hilfreiches gefunden. Ich bin neu im Bereich WCF-Server, daher kann ich Anfängerfehler nicht ausschließen.
Ich habe nach dem ABC-Prinzip eine DataContract-Schnittstelle "ITour4UDBDienst" erstellt, welche zwei OperationContract-Methoden beinhaltet. Mein Dienst implementiert diese Schnittstelle.
Der Dienst nimmt komplexe Datentypen entgegen oder gibt diese zurück.
Meine Datenklassen implementieren alle eine simple Schnittstelle. Alle Datenklassen (z. B. clsKunde & clsMitarbeiter) wurden als DataContract gekennzeichnet und ihre Properties als DataMember.
Ich habe die Tutorials im Netz zu WCF-Services gesehen und verstehe nun nicht, warum meine Klassen nicht transportiert werden können, da die Connection scheinbar nicht zu stande kommt.
Hier die Vertragsschnittstelle mit den Basisklassen und deren Schnittstelle:
[highlight=c#]
[ServiceContract]
public interface ITour4UDBDienst
{
[OperationContract]
bool SpeichereObjekt(ITour4UObjekt Objekt);
[OperationContract]
ITour4UObjekt LadeObjekt<T>(int ID);
}
public interface ITour4UObjekt
{
[DataMember(IsRequired=true)]
int ID
{
get;
set;
}
}
[DataContract(Name = "Person")]
public abstract class clsPerson : ITour4UObjekt
{
private string nachname = default(string);
private string vorname = default(string);
private int id;
[DataMember]
public string Vorname
{
get { return vorname; }
set { vorname = value; }
}
[DataMember]
public string Nachname
{
get { return nachname; }
set { nachname = value; }
}
[DataMember(IsRequired=true)]
public int ID
{
get { return id;}
set { id = value; }
}
}
[DataContract(Name="Kunde")]
public class clsKunde : clsPerson
{
}
[DataContract(Name="Mitarbeiter")]
public class clsMitarbeiter : clsPerson
{
private string rolle;
[DataMember]
public string Rolle
{
get { return rolle; }
set { rolle = value; }
}
}
[/highlight]
Mein Dienst implementiert die Vertrags-Schnittstelle und sieht wie folgt aus:
[highlight=c#]public class Tour4UDBDienst : ITour4UDBDienst
{
public ITour4UObjekt LadeObjekt<T>(int ID)
{
return clsDBService.LadeAusDB<T>(ID);
}
public bool SpeichereObjekt(ITour4UObjekt MeinObjekt)
{
return clsDBService.Speichern(Objekt);
}
}[/highlight]
Ich habe den WCF-Dienst mit VS 2008 publiziert und in meinen lokalen IIS 5 als virtuelles Verzeichnis gehängt. Wenn ich die URL im Browser aufrufe, wird mir angezeigt, dass es einen funktionierenden Dienst gibt.
In einer simplen WinForm-Anwendung habe ich einen Dienstverweis auf den WCF-Dienst erstellt und diesen "Tour4UDBDienstRef" genannt. Der Code im Client um die Methoden zu testen sieht wie folgt aus:
[highlight=c#]private void testeDienst()
{
Tour4UDBDienstClient client = new Tour4UClient.Tour4UDBDienstRef.Tour4UDBDienstClien t();
clsKunde kunde = (clsKunde)client.LadeObjekt(1);
MessageBox.Show(kunde.Nachname);
client.Close();
}[/highlight]
Da sowohl Dienst als auch Client bei mir lokal laufen, schließe ich Netzwerkprobleme aus. Auch ein Deaktivieren der FW ändert nichts.
Was mache ich falsch? Warum bricht die Verbindung mit der genannten Meldung ab?
Ich erhalte die folgende Fehlermeldung:
"System.ServiceModel.CommunicationException: Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt.. ---> System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt.. bei System.Net.HttpWebRequest.GetResponse()"
Ich habe nach dieser Fehlermeldung gegooglet aber nichts Hilfreiches gefunden. Ich bin neu im Bereich WCF-Server, daher kann ich Anfängerfehler nicht ausschließen.
Ich habe nach dem ABC-Prinzip eine DataContract-Schnittstelle "ITour4UDBDienst" erstellt, welche zwei OperationContract-Methoden beinhaltet. Mein Dienst implementiert diese Schnittstelle.
Der Dienst nimmt komplexe Datentypen entgegen oder gibt diese zurück.
Meine Datenklassen implementieren alle eine simple Schnittstelle. Alle Datenklassen (z. B. clsKunde & clsMitarbeiter) wurden als DataContract gekennzeichnet und ihre Properties als DataMember.
Ich habe die Tutorials im Netz zu WCF-Services gesehen und verstehe nun nicht, warum meine Klassen nicht transportiert werden können, da die Connection scheinbar nicht zu stande kommt.
Hier die Vertragsschnittstelle mit den Basisklassen und deren Schnittstelle:
[highlight=c#]
[ServiceContract]
public interface ITour4UDBDienst
{
[OperationContract]
bool SpeichereObjekt(ITour4UObjekt Objekt);
[OperationContract]
ITour4UObjekt LadeObjekt<T>(int ID);
}
public interface ITour4UObjekt
{
[DataMember(IsRequired=true)]
int ID
{
get;
set;
}
}
[DataContract(Name = "Person")]
public abstract class clsPerson : ITour4UObjekt
{
private string nachname = default(string);
private string vorname = default(string);
private int id;
[DataMember]
public string Vorname
{
get { return vorname; }
set { vorname = value; }
}
[DataMember]
public string Nachname
{
get { return nachname; }
set { nachname = value; }
}
[DataMember(IsRequired=true)]
public int ID
{
get { return id;}
set { id = value; }
}
}
[DataContract(Name="Kunde")]
public class clsKunde : clsPerson
{
}
[DataContract(Name="Mitarbeiter")]
public class clsMitarbeiter : clsPerson
{
private string rolle;
[DataMember]
public string Rolle
{
get { return rolle; }
set { rolle = value; }
}
}
[/highlight]
Mein Dienst implementiert die Vertrags-Schnittstelle und sieht wie folgt aus:
[highlight=c#]public class Tour4UDBDienst : ITour4UDBDienst
{
public ITour4UObjekt LadeObjekt<T>(int ID)
{
return clsDBService.LadeAusDB<T>(ID);
}
public bool SpeichereObjekt(ITour4UObjekt MeinObjekt)
{
return clsDBService.Speichern(Objekt);
}
}[/highlight]
Ich habe den WCF-Dienst mit VS 2008 publiziert und in meinen lokalen IIS 5 als virtuelles Verzeichnis gehängt. Wenn ich die URL im Browser aufrufe, wird mir angezeigt, dass es einen funktionierenden Dienst gibt.
In einer simplen WinForm-Anwendung habe ich einen Dienstverweis auf den WCF-Dienst erstellt und diesen "Tour4UDBDienstRef" genannt. Der Code im Client um die Methoden zu testen sieht wie folgt aus:
[highlight=c#]private void testeDienst()
{
Tour4UDBDienstClient client = new Tour4UClient.Tour4UDBDienstRef.Tour4UDBDienstClien t();
clsKunde kunde = (clsKunde)client.LadeObjekt(1);
MessageBox.Show(kunde.Nachname);
client.Close();
}[/highlight]
Da sowohl Dienst als auch Client bei mir lokal laufen, schließe ich Netzwerkprobleme aus. Auch ein Deaktivieren der FW ändert nichts.
Was mache ich falsch? Warum bricht die Verbindung mit der genannten Meldung ab?
Comment