WCF自定义WSDL XmlSerializeRopection行为

WCF自定义WSDL XmlSerializeRopection行为,wcf,wsdl,export,xmlserializer,Wcf,Wsdl,Export,Xmlserializer,我有一些代码可以动态构建自定义WCF wsdl。在一个特定场景中,导出的WSDL应该使用XmlSerializeRopeOptionBehavior作为IWsdlExportExtension,而不是默认的DataContractSerializeRopeOptionBehavior IWsdlExportExtension 但是,每次从WSDL生成代码中尝试此操作时,我都会从XmlSerializerMessageContractExporter的ExportBody方法中得到一个空引用异常,

我有一些代码可以动态构建自定义WCF wsdl。在一个特定场景中,导出的WSDL应该使用XmlSerializeRopeOptionBehavior作为IWsdlExportExtension,而不是默认的DataContractSerializeRopeOptionBehavior IWsdlExportExtension

但是,每次从WSDL生成代码中尝试此操作时,我都会从XmlSerializerMessageContractExporter的ExportBody方法中得到一个空引用异常,XmlSerializerMessageContractExporter方法在System.ServiceModel中内部使用该方法。我已经看过了,我看不出有什么明显的问题。由于某些原因,.NET也不希望在这种情况下使用源代码单步执行

简单地说,我能重现这一点的最基本方式是

var c = ContractDescription.GetContract(typeof(IMyService));
foreach (var op in c.Operations)
{
  op.Behaviors.Remove(typeof(DataContractSerializerOperationBehavior));
  op.Behaviors.Insert(0, new XmlSerializerOperationBehavior(op));
}

new WsdlExporter().ExportContract(c); // throws NullReferenceException
有人对此有什么想法吗


非常感谢。

您检查过c是否为空吗

我唯一能想到的就是这句话

new WsdlExporter().ExportContract(c);
也许编译器不喜欢它,试试这个

WsdlExporter wsdlImporter = new WsdlExporter()
wsdlImporter.ExportContract(c);

我们过去曾遇到过wcf和链接操作的场景,解决方案是取消对呼叫的锁定。

我已经找到了答案。问题在于,如果ServiceContract接口本身不存在XmlSerializerFormatAttribute,XmlSerializerPropertyBehavior将引发空引用异常。必须把整件事都想清楚

我想出来了。问题在于,如果ServiceContract接口本身不存在XmlSerializerFormatAttribute,XmlSerializerPropertyBehavior将引发空引用异常。必须把整件事都想清楚。。。