Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未调用DataContractResolver_C#_Wcf_Datacontractserializer - Fatal编程技术网

C# 未调用DataContractResolver

C# 未调用DataContractResolver,c#,wcf,datacontractserializer,C#,Wcf,Datacontractserializer,我正在调试一个WCF问题,其中未调用自定义的DataContractResolver。我们正在自托管wcf服务,并创建一个ServiceHost,如下所示: private static ServiceHost GetServiceHost(DataContractResolver dataContractResolver, Binding binding, string address) { var serviceHost = new ServiceHost(t

我正在调试一个WCF问题,其中未调用自定义的
DataContractResolver
。我们正在自托管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();
    }
私有静态ServiceHost GetServiceHost(DataContractResolver DataContractResolver,绑定绑定,字符串地址)
{
var serviceHost=新serviceHost(typeof(serviceinpl));
var endpoint=serviceHost.AddServiceEndpoint((typeof(IServiceInterface)),绑定,地址);
foreach(endpoint.Contract.Operations中的var操作)
operation.Behaviors.Find().DataContractResolver=DataContractResolver;
返回服务主机;
}
我已经附加了一个调试器,并检查了行为设置是否正确。我们创建的客户端如下所示:

    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();
    }
专用静态IServiceInterface GetChannel(DataContractResolver DataContractResolver、绑定绑定、EndpointAddress EndpointAddress)
{
var channelFactory=new DuplexChannelFactory(new CallbackObject(),binding,endpointAddress);
foreach(channelFactory.Endpoint.Contract.Operations中的var操作)
operation.Behaviors.Find().DataContractResolver=DataContractResolver;
返回channelFactory.CreateChannel();
}
在这里,行为也被正确地附加。但是,当我从创建的通道调用时,不会调用我的
dataContractResolver
(通过断点、
Console.WriteLine
检查,甚至引发异常)。我将我的方法与MSDN文档和几篇博客文章进行了比较,但不明白为什么它不起作用。我错过了什么

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

编辑:
我注意到,对于任何类型为
object
DataMember
属性,都会调用解析器。它仍然不能在整个合同类型中运行,尽管,

我已经用一个最小的解决方案重新创建了这个问题,如果需要的话我可以发布,但至少在Meta上的讨论表明这是一个不好的做法?可能会将其作为要点加载到github上?@StuartLC:好主意,谢谢。将把要点编辑成问题