Seite 1 von 1

VAIL SDK

Verfasst: 16. Jun 2010, 23:25
von Pseudocode
Hallo !

Hat sich schon jemand mit der Vail SDK beschäftigt!?
Ich versuche gerade einen Provider zu erstellen und gehe die Beispiel Anwendung Chat durch.
Alles nach Anweisung erstellt und kompiliert.Läuft ohne Probleme
Jedoch passiert da gar nichts.Host und Client Process laufen aber sons passiert nix. Keine Exception etc.
Also falls das jemand schon am laufen hat würde ich mich über Tipps freuen!

Gruß

Re: VAIL SDK

Verfasst: 18. Jun 2010, 12:36
von Martin
Laufen beide auf dem Server?
Ist der Clientconnect erfolgreich?
Eine Verbindung kommt im Provider erst nach dem ersten Senden von Daten zustande.

Gruß
Martin

Re: VAIL SDK

Verfasst: 19. Jun 2010, 08:53
von Pseudocode
Hallo Martin,

danke für die Antwort.
Es laufen beide auf dem Server. Bin das Beispiel jetzt nochmal durchgegangen.
Aber ohne Ergebnis.
Der Connect ist nicht erfolgreich. Der müsste eigentlich beim Button Connect passieren.

Was mir aufgefallen ist:
Im ChatObjectModel Datei ObjectModelImplementation.cs existiert im konstruktor folgendes:

Code: Alles auswählen

m_connector = ConnectorFactory.GetConnector<IProvider>("provider", this);
m_connector.ConnectionOpened += m_connector_ConnectionOpened;
Hier sollte, so wie ich das verstehe, die Verbindung stattfinden.
So passiert einfach nichts. Er laüft durch und beim m_connector ist dann die connected eigenschaft auf false. sollte aber auf true stehen!?
In der SDK steht jetzt zwar nichts von einer änderung. Aber im client wird der Host "chat" aufgerufen.
Hier steht aber als Provider ID "provider". Wenn man das jetzt auf "chat" ändert wird eine Exception geworfen.
Und zwar im Client:

System.InvalidOperationException wurde nicht behandelt.
Message=The InstanceContext provided to the ChannelFactory contains a UserObject that
does not implement the CallbackContractType 'ChatObjectModel.IProviderCallback'.
Source=System.ServiceModel

StackTrace:
at System.ServiceModel.DuplexChannelFactory`1.CreateChannel(InstanceContext callbackInstance, EndpointAddress address, Uri via)
at System.ServiceModel.DuplexChannelFactory`1.CreateChannel(EndpointAddress address, Uri via)
at System.ServiceModel.ChannelFactory`1.CreateChannel()
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.ProviderRegistryClient.CreateWithCallback[T](ProviderInfo info, Object callback, NetworkCredential credential)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.ProviderConnectionFactory`1.CreateConnection(ProviderInfo provider, Object callback, NetworkCredential credential)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.AsyncConnector`1.Connect(ProviderConnectionInfo info)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.ConnectionCanceller`1.Connect(ProviderConnectionInfo info)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.InProcInstantiator`1.Connect(ProviderConnectionInfo info)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.ConnectionInternals`1.Connect(ProviderConnectionInfo info)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.ProviderConnector`1.DoConnection()
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.ProviderConnector`1.Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.IProviderQueryListener.HandleResult(ProviderInfo info)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.AsyncProviderQuery.HandleResult(ProviderInfo info)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.AsyncProviderQuerySender.DoQuery(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
InnerException:

Jetzt könnte man in WCF seine eigenen Endpunkte definieren etc.
Aber dann macht der Provider irgendwie keinen Sinn da ich dann ja meinen eigenen WCF Dienst schreiben kann.

Ich weiss jetzt nicht genau nach welchen Fehler ich hier genau suchen muss.
Wäre für Hilfe und Tipps dankbar!

Re: VAIL SDK

Verfasst: 19. Jun 2010, 23:43
von Martin
Du musst im Client die Methode Connect() aufrufen. Hast du das implementiert?
Wenn der Connect erfolgreich war, wird der Event ausgelöst aus deine m_connector_ConnectionOpened() Methode aufgerufen.

Gruß
Martin

Re: VAIL SDK

Verfasst: 20. Jun 2010, 09:01
von Pseudocode
Hallo Martin,

ja das mache ich. Im Client wird der Aufruf gemacht wobei ein Name übergeben wird.
objModel.Connect(this.UserName.Text);

Dann passiert folgendes:
Das Programm springt in die ObjectModel.cs Klasse führt dort die Connect Procedur aus ( public void Connect(string userName) )
In dieser Procedur kommt dann der Backend Aufruf. ( m_backend.Connect(userName); )
Hier spring der auch erfolgreich in die ObjectModelImplementation.cs Klasse.

Und hier kommt jetzt der dritte Connect Aufruf ( m_connector.Connect(m_name); ) wobei der Connector ein ProviderConnector ist --> private ProviderConnector<IProvider> m_connector;

Wenn jetzt im Konstruktor der Klasse ObjectModelImplementation steht:

m_connector = ConnectorFactory.GetConnector<IProvider>("provider", this); ( orginal )

bekomme ich beim m_connector.Connect(m_name) ein false zurück und die Methode m_connector_ConnectionOpened() wird nicht aufgerufen

oder
ich versuche mit
m_connector = ConnectorFactory.GetConnector<IProvider>("chat", this);
dann bekomme ich die oben genannte Fehlermeldung beim Client und der springt auch nicht in die m_connector_ConnectionOpened() Methode rein.

Gruß

Re: VAIL SDK

Verfasst: 20. Jun 2010, 14:40
von Martin
Ändere mal
host.Open("provider");

Und am Client entsprechend
ConnectorFactory.GetConnector<IProvider>("provider", this);

Gruß
Martin

Re: VAIL SDK

Verfasst: 20. Jun 2010, 19:03
von Pseudocode
Hallo Martin,

habe ich auch schon versucht. Einmal beide mit "provider" und einmal beide mit "chat".

Da bekomme ich immer:
The InstanceContext provided to the ChannelFactory contains a UserObject that
does not implement the CallbackContractType 'ChatObjectModel.IProviderCallback'.

Muss hier vielleicht irgendwo im Client WPF noch das Interface IProviderCallback eingebunden werden ?

Habe es zwar schon probiert, aber ohne Erfolg!

Re: VAIL SDK

Verfasst: 20. Jun 2010, 21:04
von cyberwaelder
hallo,

wenn du m_connector = ConnectorFactory.GetConnector<IProvider>("chat", this); verwendest muss du IProviderCallback in der klasse implementiert haben, da der 2. parameter das callbackobject sein sollte.

so sollte es funktionieren:

public class ObjectModelImplementation : IProviderCallback
{
public ObjectModelImplementation ()
{
InstanceContext context = new InstanceContext(this);
m_connector = ConnectorFactory.GetConnector<IProvider>("chat", context);
}
}

lg

Re: VAIL SDK

Verfasst: 20. Jun 2010, 23:14
von Pseudocode
Hi!

Vielen Dank für die Antwort. Leider ist der Fehler aber immer noch da.

Ich habe mal das komplette Chat Beispielprojekt hochgeladen c# .
Vielleicht kann das ja bei der Fehlersuche helfen, da ich hier leider nicht mehr weiss wo ich suchen soll!?

Gruß

Re: VAIL SDK

Verfasst: 21. Jun 2010, 02:45
von cyberwaelder
das problem liegt bei:

m_connector.Connect(m_name);

hier sollte der callback übergeben werden. du übergibst aber den namen.
da der callback schon vorher übergeben wurde, musst du hier nichts mehr übergeben.

lg

Re: VAIL SDK

Verfasst: 21. Jun 2010, 19:05
von Pseudocode
Ja! Das war es !

Vielen Dank für eure Hilfe. Hätte das jetzt nicht so schnell gefunden.
Muss mich da noch etwas in WCF einlesen.

Re: VAIL SDK

Verfasst: 21. Jun 2010, 19:28
von Mike Lowrey
Muss mich da noch etwas in WCF einlesen.
Wenn du eine gescheite Doku abseits des msdn gefunden hast, wäre ich über einen Hinweis dankbar.

Re: VAIL SDK

Verfasst: 22. Jun 2010, 07:44
von Pseudocode
Ich habe mir 2 Bücher bestellt. Ansonsten habe ich mich am msdn orientiert.

Re: VAIL SDK

Verfasst: 22. Jun 2010, 14:14
von Pseudocode
Eine Frage hätte ich noch!

Was ist eigentlich der Vorteil der Provider?
Ich sehe hier nicht so richtig den Unterschied zu einer "normalen" WCF Anwendung?

Gruß

Re: VAIL SDK

Verfasst: 22. Jun 2010, 14:31
von Martin
@Mike: Juval Löwy: Programming WCF Services, O'Reilly

Der Vorteil der Provider soll die einfache Konfiguration sein (keine Bindings, keine Endpoints usw. zu definieren).
Der zweite Vorteil soll die einfache Wiederverbindung bzw. das Handling der Wiederverbindung sein (so lese ich das aus der SDK Doku).
Der dritte Vorteil ist das identische Programmiermodell, egal ob Serverseitig oder Clientseitig kommuniziert werden soll.

Gruß
Martin