Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
WCF (asynchron) mit Callback versehen
Runshak
myCSharp.de - Member



Dabei seit:
Beiträge: 71

Themenstarter:

WCF (asynchron) mit Callback versehen

beantworten | zitieren | melden

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...
Fehler
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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.812
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers