不调用DataContractResolver

时间:2014-03-04 08:03:49

标签: c# wcf datacontractserializer

我正在调试我的自定义DataContractResolver未调用的WCF问题。我们自行托管wcf服务,并创建一个ServiceHost,如下所示:

    private static ServiceHost GetServiceHost(DataContractResolver dataContractResolver, Binding binding, string address)
    {
        var serviceHost = new ServiceHost(typeof(ServiceImpl));
        var endpoint = serviceHost.AddServiceEndpoint((typeof(IServiceInterface)), binding, address);
        foreach (var operation in endpoint.Contract.Operations)
            operation.Behaviors.Find<DataContractSerializerOperationBehavior>().DataContractResolver = dataContractResolver;

        return serviceHost;
    }

我附加了一个调试器并检查了行为确实已正确设置。我们创建了这样一个客户端:

    private static IServiceInterface GetChannel(DataContractResolver dataContractResolver, Binding binding, EndpointAddress endpointAddress)
    {
        var channelFactory = new DuplexChannelFactory<IServiceInterface>(new CallbackObject(), binding, endpointAddress);
        foreach (var operation in channelFactory.Endpoint.Contract.Operations)
            operation.Behaviors.Find<DataContractSerializerOperationBehavior>().DataContractResolver = dataContractResolver;

        return channelFactory.CreateChannel();
    }

此处也正确附加了行为。但是,当我从创建的频道发出呼叫时,我的dataContractResolver未被调用(使用断点检查,Console.WriteLine甚至抛出异常)。我将我的方法与MSDN文档和一些博客文章进行了比较,但不明白为什么它不起作用。我错过了什么?

我创建了一个最小的示例解决方案,可以从gist here下载。 要点只包含文件。在我的解决方案中,它们分为三个不同的项目,服务器(控制台应用程序),客户端(控制台应用程序)和公共(类库),如其命名空间所示

修改 我注意到,对于类型为DataMember的任何object属性,都会调用解析程序。但是,它仍然没有针对整个合同类型运行,

0 个答案:

没有答案