.net Protobuf net如何在net CF客户端使用WCF服务?

.net Protobuf net如何在net CF客户端使用WCF服务?,.net,wcf,protobuf-net,coldfusion,.net,Wcf,Protobuf Net,Coldfusion,我正试图使用Protobuf net的RPC功能使用WCF Web服务。这是我的服务合同: 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 IEcho

我正试图使用Protobuf net的RPC功能使用WCF Web服务。这是我的服务合同:

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;
        }
    }
}
下面是我的.NET CF客户端:

类EchoServiceClient:ProtoClient,IEchoService {

这就是我尝试使用Web服务的方式:

class Program
{
    static void Main(string[] args)
    {
        EchoServiceClient client = new EchoServiceClient();
        Console.WriteLine(client.EchoNull());
    }
}
我不断收到以下消息的异常:

为了在禁用AllowWriteStreamBuffering时执行写入操作,必须将ContentLength设置为非负数,或将SendChunked设置为true

在深入研究protobuf net的源代码后,我发现问题似乎是没有指定内容长度。是否有其他方法使用.net CF中的protobuf net序列化来使用WCF Web服务,或者解决此问题的方法


Marc你在:)

编辑:我误解了问题;简短版本:ProtoClient!=WCF。它们不兼容


Compact Framework的缺点是WCF堆栈缺少所有必要的扩展点;简言之,您不能在WCF+CF中使用这种方法

不过,我知道protobuf net使用CF的各种工作方法

  • 让您的服务返回一个
    byte[]
    或(更好的)
    Stream
    并手动处理;不,它不漂亮,但可以工作
  • 您可以尝试protobuf net中包含的替代RPC堆栈;我认为这在CF上有效(不过,我需要检查;我的内存失败)

另一个堆栈是
ProtoClient
;老实说,我记不起它在CF上是否有效,我现在还不能检查。它应该在CF上有效,因为我记得必须让它编译……一些示例用法(对于2.0样式和3.5样式)是。

编辑:我误解了问题;简短版本:ProtoClient!=WCF。它们不兼容


Compact Framework的缺点是WCF堆栈缺少所有必要的扩展点;简言之,您不能在WCF+CF中使用这种方法

不过,我知道protobuf net使用CF的各种工作方法

  • 让您的服务返回一个
    byte[]
    或(更好的)
    Stream
    并手动处理;不,它不漂亮,但可以工作
  • 您可以尝试protobuf net中包含的替代RPC堆栈;我认为这在CF上有效(不过,我需要检查;我的内存失败)

另一个堆栈是
ProtoClient
;老实说,我记不起它在CF上是否有效,我现在还不能检查。它应该在CF上有效,因为我记得必须让它编译……一些示例用法(对于2.0样式和3.5样式)是。

谢谢你的回复。我将尝试播放,看看我能从RPC堆栈中得到什么。@Richard-我没有太多时间来研究WP7,除了让v2的核心工作(注意v2作为源代码提供,但尚未发布)。除此之外,
字节[]
技巧当然应该有效,并且具有简单性的优点。本周早些时候,我注意到Silverlight现在有一些以前缺少的扩展点,我可以使用这些扩展点更直接地将其挂钩,但我不知道这是否包括WP7。唉,我只有一个人……谢谢你的回复。我会尝试播放并查看我能从RPC堆栈中得到什么。@Richard-我没有太多时间来查看WP7,只是为了让v2的核心正常工作(注意v2作为源代码提供,但尚未发布)。除此之外,
字节[]
技巧当然应该有效,并且具有简单性的优点。本周早些时候,我注意到Silverlight现在有一些以前缺少的扩展点,我可以使用这些扩展点更直接地将其挂钩,但我不知道这是否包括WP7。唉,我只有一个。。。
class Program
{
    static void Main(string[] args)
    {
        EchoServiceClient client = new EchoServiceClient();
        Console.WriteLine(client.EchoNull());
    }
}