Laden...

WCF (asynchron) mit Callback versehen

Erstellt von Runshak vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.914 Views
R
Runshak Themenstarter:in
71 Beiträge seit 2014
vor 8 Jahren
WCF (asynchron) mit Callback versehen

Hallo,

ich mein WCF-Projekt hat jetzt eine DLL bekommen und in dieser DLL (c++) befindet sich ein long* Pointer. Das Einbinden ohne diesen funktioniert einwandfrei mit ihm erhalte ich eine CallbackException...Deswegen mein Gedanke, dass beim Ausführen der DLL-Funktion die Rückgabe nicht mehr zurück kommt, da mein Service nur in eine Richtung läuft...also würde ich ein Callback einbauen...das habe ich auch gemacht und bekomme jetzt folgende Fehlermeldung beim Aufruf meines Services...

 using (ServiceHost sh = new ServiceHost(typeof(Cservice)))

sobald diese Codezeile erreicht wird spuckt der Compiler folgenden Text aus...

Fehlermeldung:
InvalidOperationException: Mit "IsOneWay=true" gekennzeichnete Vorgänge müssen keine Ausgabeparameter, als Verweis zu übergebende Parameter oder Rückgabewerte deklarieren.

Mein asynchroner Vertrag lautet:

using System;
using System.ServiceModel;

namespace Vertrag
{
    [ServiceContract(Name = "VertragAsy", SessionMode= SessionMode.Allowed, CallbackContract=typeof(IcallbackContract))]
    public interface IvertragAsynchron
    {
            [OperationContract(AsyncPattern= true, IsOneWay=true)]
            IAsyncResult BeginDoIt(AsyncCallback callback, object asyncState);
            CdatenVertrag EndDoIt(IAsyncResult result);

            [OperationContract(AsyncPattern = false)]
            bool Ping();
    }
}

mein Callbackvertrag lautet:

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;

namespace Vertrag
{
    [ServiceContract]
    public interface IcallbackContract
    {
        [OperationContract(IsOneWay=true)]
        CdatenVertrag DoIt();      

        [OperationContract()]
        bool Ping();         
    }
}

Wie ich den Callback jetzt aber noch dem Client richtig mitteile steig ich nicht durch...das Buch, welches mir helfen soll, ist da recht dürftig mit Informationen

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo Runshak,

die Fehlermeldung ist doch eindeutig. Entweder asynchron od. OneWay mit Callback. Das sind zwei verschiedene Dinge. Async heißt nur, dass es asynchron stattfindet während OneWay eine Art "fire and forget" ist. Daher besteht bei OneWay auch die Möglichkeit per Callback den Client quasi per Ereignis zu informieren.

Wenn du vermutest, dass es am Pointer liegt, so kannst du nach [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden vorgehen um deine Vermutung zu validieren.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"