vdh*_*ant 7 .net c# wcf netdatacontractserializer
我有一个场景,我需要使用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();
Run Code Online (Sandbox Code Playgroud)
在服务器端:
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();
Run Code Online (Sandbox Code Playgroud)
问题是我使用的是VS生成的客户端服务代理和标准的VS .svc服务.所以我不控制客户端代理或服务的创建,上面的代码假定.
帖子中的一条评论提到你可以实现"IServiceBehavior而另一个是IClientBehavior",但我不知道如何去做上面的代码并改变它.有没有人有任何想法???
干杯安东尼
| 归档时间: |
|
| 查看次数: |
2516 次 |
| 最近记录: |