WCF自定义WSDL XmlSerializerOperationBehavior

时间:2010-04-01 17:42:17

标签: wcf wsdl export xmlserializer

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

但是,每次我从WSDL生成代码尝试此操作时,我都会从XmlSerializerMessageContractExporter的ExportBody方法获取一个空引用异常(由XmlSerializerOperationBehavior ExportContract方法在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

有没有人对此有任何想法?

非常感谢。

2 个答案:

答案 0 :(得分:0)

你检查c不是空吗?

我能想到的另一件事是这句话

new WsdlExporter().ExportContract(c);

也许compilier不喜欢它,试试这个

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

我们过去曾经有过使用wcf和链接操作的方案,而解决方案是解除调用。

答案 1 :(得分:0)

我明白了。问题是如果ServiceContract接口本身不存在XmlSerializerFormatAttribute,XmlSerializerOperationBehavior将抛出空引用异常。不得不反思整个事情来弄明白......