我有代码可以动态构建自定义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
有没有人对此有任何想法?
非常感谢。
答案 0 :(得分:0)
你检查c不是空吗?
我能想到的另一件事是这句话
new WsdlExporter().ExportContract(c);
也许compilier不喜欢它,试试这个
WsdlExporter wsdlImporter = new WsdlExporter()
wsdlImporter.ExportContract(c);
我们过去曾经有过使用wcf和链接操作的方案,而解决方案是解除调用。
答案 1 :(得分:0)
我明白了。问题是如果ServiceContract接口本身不存在XmlSerializerFormatAttribute,XmlSerializerOperationBehavior将抛出空引用异常。不得不反思整个事情来弄明白......