3 Stimmen

WCF Streaming Service, der die Streamlänge zurückgibt und Eingabeparameter enthält

Ich versuche, einen WCF-Streaming-Dienst zu erstellen. Ich habe zwei Anforderungen, über die ich zu stolpern scheine, um dies zum Laufen zu bringen:

  • Größe des Stream-Streams
  • Eingabeparameter

Mein Nachrichtenvertrag sieht so aus:

[MessageContract]
public class MyStream
{
 [MessageHeader]
 public long StreamSize;

 [MessageBodyMember]
 public Stream StreamData;
}  

Mein Operationsvertrag sieht so aus:

[ServiceContract]
public interface IStreamService
{
     [OperationContract]
     MyStream GetData(string data);
}

Die Fehlermeldung, die ich erhalte, wenn ich versuche, den Webdienst zu nutzen, lautet wie folgt:

Die Operation "GetData" konnte nicht geladen werden, da sie einen Parameter oder einen Rückgabetyp vom Typ System.ServiceModel.Channels.Message oder einen Typ hat, der MessageContractAttribute hat und andere Parameter unterschiedlicher Typen hat. Wenn System.ServiceModel.Channels.Message oder Typen mit MessageContractAttribute verwendet werden, darf die Methode keine anderen Arten von Parametern verwenden.

Nach meinem Verständnis von diesem Beitrag muss ich einen Nachrichtenvertrag verwenden, um die Länge meines Streams zu erhalten, aber wenn ich von einem Datenauftrag zu einem Nachrichtenvertrag wechsle, darf ich keine Eingabeparameter mehr übergeben.

Gibt es eine Konfigurationsänderung, die mir fehlt? Oder etwas anderes, das ich versuchen kann? Vielen Dank!

2voto

Ladislav Mrnka Punkte 355028

Sie müssen auch MessageContract für die Anforderung erstellen.

[MessageContract]
public class GetDataRequest
{
   [MessageBodyMember(Name="data")]
   public string Data { get; set; }
}

Dann definieren Sie Ihre Operation wie folgt:

[OperationContract]
MyStream GetData(GetDataRequest request);

0 Stimmen

Wow - wie einfach! Vielen Dank.

0 Stimmen

Der Punkt ist, dass, wenn Sie einen Nachrichtenkontakt für die Antwort verwenden, Sie ihn auch für die Anfrage verwenden müssen und umgekehrt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X