Entwickler-Ecke

Verteilte Systeme - Client sendet nichts, aber verbindet sich


Mr.y - Mi 07.07.10 08:27
Titel: Client sendet nichts, aber verbindet sich
Hallo, ich habe mich vor 1 einer woche angefangen mit wcf zu beschäftigen, grundlegende Sache wie: verbindung zwischen Client und Hoster hab ich hinbekommen
jetzt will ich eine nachricht senden:)
und das klappt nicht



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
public partial class Form1 : Form, ServiceReference.IHostFunctionsCallback
    {   //IHostFunctionsCallback bietet die Möglichkeit von der IHostfunctions funktionen für callback zu nutzen
        ServiceReference.HostFunctionsClient clsClient = null;//bietet Zugriff auf den Host
        public Form1()
        {

            InitializeComponent();

            InstanceContext clsContext = new InstanceContext(this);

            clsClient = new ServiceReference.HostFunctionsClient(clsContext);

        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                clsClient.Connect();//Host anrufen; klappt

            }
            catch (Exception ex)
            {

                txtChat.Text = ex.Message;
            }
        }

        private void btnDisconnect_Click(object sender, EventArgs e)
        {
            try
            {
                clsClient.Disconnect();

            }
            catch (Exception ex)
            {

                txtChat.Text = ex.Message;
            }

        }

        private void btnSenden_Click(object sender, EventArgs e)
        {
            DataBibliothek.ChatMessage clsMessage = new DataBibliothek.ChatMessage();

            clsMessage.pName = txtName.Text.ToString();
            clsMessage.pMessage = txtMessage.Text.ToString();

            if (clsClient.State == CommunicationState.Opened)
            {
                       clsClient.Send(clsMessage); //FEHLER, Die Methode oder der      Vorgang sind nicht implementiert.

            }

        }

clsClient ist eine Instanz von einem Dienstverweis des Contracts, der so aussieht:
Dienstverweis funktioniert, da er ja verbindet....und der hoster meldet, dass client verbunden ist und status ist auf "opened"



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
[ServiceContract(CallbackContract= typeof(IClientFunctions))]//"Verknüpfung" mit dem Client-Interface
    public interface IHostFunctions
    {
        [OperationContract]
        void Connect();//kann vom Client genutzt werden für die Anmeldung beim Host

        [OperationContract]
        void Disconnect();//kann vom Client genutzt werden für die Anmeldung beim Host

        [OperationContract]
        void Send(ChatMessage clsMessage); //Client sendet ein Objekt(ChatMessage) an den Host

    }


ich meine....ich verbinde mich mit der selben clsClient.connect() und es geht
dann etwas später....clsClient.send....oder auch direckt nach clsClient.connect() und er sagt aufeinmal: nicht imeplementiert
Brauche Hilfe :(
Danke im Voraus

Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt


Yogu - Mo 12.07.10 08:32

Moin,

was ist denn das für eine Klasse, ServiceReference.HostFunctionsClient? Wirklich gut dokumentiert ist die Klasse ja nicht...

Was spricht gegen TcpClient [http://msdn.microsoft.com/de-de/library/system.net.sockets.tcpclient.aspx] und TcpListener [http://msdn.microsoft.com/de-de/library/system.net.sockets.tcplistener.aspx]? Darüber findest du im MSDN viel, auch umfangreiche Beispiele. Wenn du dazu eine Frage hast, kann ich dir auch helfen; damit hab ich auch schon gearbeitet.

Grüße,
Yogu

Mein 2000. Beitrag :party:


Mr.y - Mo 12.07.10 11:38

Danke für deine Hilfe :)

habs schon hinbekommen, es lag einfach an dem Dienstverweis, denn ich gemacht hab.
Irgendwie hat er da paar Funktionen doppelt eingetragen...
Habs noch mal neu erstellt und es ging...