0

我有即时构建自定义 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

有人对此有任何想法吗?

非常感谢。

4

2 回答 2

0

我想到了。问题是,如果 ServiceContract 接口本身不存在 XmlSerializerFormatAttribute,XmlSerializerOperationBehavior 将引发空引用异常。必须反射整个事情才能弄清楚...

于 2010-04-08T14:33:06.253 回答
0

你检查过 c 不为空吗?

我唯一能想到的就是这个声明

new WsdlExporter().ExportContract(c);

也许编译器不喜欢它,试试这个

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

我们过去曾遇到过使用 wcf 和链接操作的场景,解决方案是取消链接调用。

于 2010-04-02T10:49:40.913 回答