NetDataContractSerializer 和 WCF
我有一个场景,我需要使用 NetDataContractSerializer 而不是 DataContractSerializer。
到目前为止,我一直在使用这种方法 - http ://www.pluralsight.com/community/blogs/aaron/archive/2006/04/21/22284.aspx - 看起来很简单,但根据此 http://social.msdn.microsoft.com/forums/en-US /wcf/thread/cb0c56c0-3016-4cda-a3c7-8826f8cc5bb0/ 方法不正确。
环顾四周,我发现了以下内容 - http://social.msdn.microsoft.com/forums/en-US/wcf/thread/f30ecd17-cac0-4cdc-8142-90b5f411936b/
基本上,您需要运行以下命令:
这就是我在客户端的内容:
ChannelFactory<IPersonService> factory = new ChannelFactory<IPersonService>("WSHttpBinding_IPersonService");
foreach (OperationDescription desc in factory.Endpoint.Contract.Operations)
{
DataContractSerializerOperationBehavior dcsOperationBehavior = desc.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (dcsOperationBehavior != null)
{
int idx = desc.Behaviors.IndexOf(dcsOperationBehavior);
desc.Behaviors.Remove(dcsOperationBehavior);
desc.Behaviors.Insert(idx, new NetDataContractSerializerOperationBehavior(desc));
//return true;
}
}
IPersonService svc = factory.CreateChannel();
在服务器端:
myServiceHost = new ServiceHost(typeof(PersonService), baseAddress);
foreach (ServiceEndpoint endPoint in myServiceHost.Description.Endpoints)
{
foreach (OperationDescription desc in endPoint.Contract.Operations)
{
DataContractSerializerOperationBehavior dcsOperationBehavior = desc.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (dcsOperationBehavior != null)
{
int idx = desc.Behaviors.IndexOf(dcsOperationBehavior);
desc.Behaviors.Remove(dcsOperationBehavior);
desc.Behaviors.Insert(idx, new NetDataContractSerializerOperationBehavior(desc));
//return true;
}
}
}
myServiceHost.Open();
问题是我正在使用 VS 生成的客户端服务代理和标准 VS .svc 服务。因此,我不控制客户端代理或服务的创建,并且上面的代码假设了这一点。
帖子中的评论之一提到您将能够实现“IServiceBehavior,另一个是 IClientBehavior”,但我不知道如何获取上述代码并更改它。有人有什么想法吗???
干杯 安东尼
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论