Ich versuche, einen WCF-Webservice mit den RPC-Funktionen des Protobuf-Net zu konsumieren. Hier ist mein Service-Vertrag:Protobuf-net Wie verbraucht man einen WCF-Dienst im NET CF-Client?
namespace WcfEchoService
{
// NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config.
[ServiceContract]
public interface IEchoService
{
[OperationContract, ProtoBehavior]
string Echo(string value);
[OperationContract, ProtoBehavior]
string EchoNull();
[OperationContract, ProtoBehavior]
CompositeType[] EchoData(CompositeType[] value);
}
// Use a data contract as illustrated in the sample below to add composite types to service operations.
[DataContract]
[ProtoContract]
public class CompositeType
{
[ProtoMember(1)]
public bool BoolValue
{
get;
set;
}
[ProtoMember(2)]
public string StringValue
{
get;
set;
}
}
}
Und unten ist mein .NET CF-Client:
Klasse EchoServiceClient: ProtoClient, IEchoService {
#region IEchoService Members
public EchoServiceClient() : base(new HttpBasicTransport("my service URI"))
{
}
public string Echo(string value)
{
return (string)this.Invoke("Echo", value);
}
public string EchoNull()
{
return (string)this.Invoke("EchoNull");
}
public CompositeType[] EchoData(CompositeType[] value)
{
return (CompositeType[])this.Invoke("EchoData", value);
}
#endregion
}
Und das ist, wie ich versuche, das zu konsumieren webservice:
class Program
{
static void Main(string[] args)
{
EchoServiceClient client = new EchoServiceClient();
Console.WriteLine(client.EchoNull());
}
}
Ich bekomme immer eine Ausnahme mit t er folgende Nachricht:
Entweder ContentLength muss auf eine nicht negative Zahl festgelegt werden, oder SendChunked auf True festgelegt, um die Schreiboperation auszuführen, wenn AllowWriteStreamBuffering deaktiviert ist.
Soweit ich nach dem graben im Quellcode von Protobuf-Net feststellen kann, scheint das Problem zu sein, dass keine Inhaltslänge angegeben ist. Gibt es eine andere Möglichkeit, WCF-Webdienste mit der .NET-CF-Serifizierung von Protobuf-Net zu nutzen oder eine Lösung für dieses Problem zu finden?
Marc du bist dran :)
Vielen Dank für Ihre Antwort. Ich werde versuchen zu spielen und zu sehen, was ich aus diesem RPC-Stack machen kann. –
Enthält dies WP7? –
@Richard - Ich hatte nicht viel Zeit, um auf WP7 zu schauen, außer um den * Kern * von v2 zum Laufen zu bringen (Anmerkung v2 ist als Quelle verfügbar, wird aber nicht veröffentlicht). Ansonsten sollte der 'byte []' Trick sicher funktionieren und den Vorteil der Einfachheit haben. Mir ist Anfang dieser Woche zu Ohren gekommen, dass Silverlight nun einige der bisher fehlenden Erweiterungspunkte hat, die ich vielleicht verwenden kann, um es direkter einzubinden, aber ich weiß nicht, ob dies WP7 beinhaltet. Ach, da ist nur einer von mir ... –