J'essaie de consommer un service web WCF en utilisant les capacités RPC du Protobuf-net. Voici mon contrat de service:Protobuf-net Comment consommer un service WCF dans un client NET CF?
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;
}
}
}
Et juste au-dessous est mon client .NET CF:
classe 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
}
Et voilà comment j'essaie de consommer la webservice:
class Program
{
static void Main(string[] args)
{
EchoServiceClient client = new EchoServiceClient();
Console.WriteLine(client.EchoNull());
}
}
Je continue de recevoir une exception avec t Le message suivant:
ContentLength doit être défini sur un nombre non négatif ou SendChunked sur true pour effectuer l'opération d'écriture lorsque AllowWriteStreamBuffering est désactivé.
Autant que je sache après avoir creusé dans le code source de protobuf-net, le problème semble être qu'il n'y a pas de longueur de contenu spécifiée. Existe-t-il un autre moyen de consommer les services Web WCF en utilisant la sérialisation protobuf-net dans .NET CF ou un moyen de résoudre ce problème?
Marc vous êtes sur :)
Merci pour votre réponse. Je vais essayer de jouer et voir ce que je peux faire de cette pile RPC. –
Est-ce que cela inclut WP7? –
@Richard - Je n'ai pas eu beaucoup de temps à regarder WP7, sauf pour faire fonctionner le * core * de v2 (la note v2 est disponible en tant que source, mais n'est pas publiée). En dehors de cela, l'astuce 'byte []' devrait certainement fonctionner et a l'avantage de la simplicité. Il est venu à mon avis plus tôt cette semaine que Silverlight a maintenant quelques-uns des points d'extension précédemment manquants que je pourrais être en mesure d'utiliser pour l'accrocher plus directement, mais je ne sais pas si cela inclut WP7. Hélas, il y a juste un de moi ... –