Question

Je suis en train de consommer un WebService WCF en utilisant les capacités RPC du Protobuf-net. Voici mon contrat de service:

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 le webservice:

class Program
{
    static void Main(string[] args)
    {
        EchoServiceClient client = new EchoServiceClient();
        Console.WriteLine(client.EchoNull());
    }
}

Je continue à recevoir une exception avec le message suivant:

Soit ContentLength doit être réglé à un nombre non négatif, ou SendChunked à true afin d'effectuer l'opération d'écriture lorsque AllowWriteStreamBuffering est désactivé.

Pour autant que je peux dire après avoir creusé dans le code source de protobuf net le problème semble être qu'il n'y a pas de contenu-longueur spécifiée. Est-il une autre façon de consommer webservices WCF en utilisant la sérialisation protobuf-net dans .NET CF ou un moyen de résoudre ce problème?

Marc vous êtes sur:)

Était-ce utile?

La solution

Edit: J'ai mal lu la question; version courte: ProtoClient = WCF. Ils ne sont pas compatibles.


Compact Framework souffre que la pile de WCF n'a pas tous les points d'extension nécessaires à cet effet; Bref, vous ne pouvez pas utiliser cette approche avec WCF + CF.

Je suis au courant des différentes approches de travail pour protobuf net avec CF, bien;

  • a votre service un retour byte[] ou (mieux) Stream et de gérer manuellement; non, ce n'est pas assez, mais cela fonctionne
  • vous pouvez essayer la pile RPC alternatif inclus avec protobuf-net; I pense cela fonctionne sur CF (je dois vérifier, si, ma mémoire ne)

La pile alternative est ProtoClient<T>; Honnêtement, je ne me souviens pas si cela fonctionne sur CF, et je ne suis pas en mesure de vérifier au moment. il devrait sur le travail des FC, comme je me souviens d'avoir à re-mettre en œuvre Expression pour le compiler ... une exemple d'utilisation (pour les deux 2.0 style et 3,5 style) sont ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top