.net Protobuf net如何在net CF客户端使用WCF服务?
我正试图使用Protobuf net的RPC功能使用WCF Web服务。这是我的服务合同:.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
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());
}
}