У меня есть код, который на лету создает пользовательский wsdl WCF. В одном конкретном сценарии экспортируемый WSDL должен использовать XmlSerializerOperationBehavior в качестве IWsdlExportExtension, а не DataContractSerializerOperationBehavior IWsdlExportExtension по умолчанию.
Однако каждый раз, когда я пытаюсь сделать это из кода генерации WSDL, я получаю исключение нулевой ссылки из метода ExportBody XmlSerializerMessageContractExporter (который используется внутренне в System.ServiceModel методом XmlSerializerOperationBehavior ExportContract). Я отразил это и не вижу ничего заведомо неправильного. По какой-то причине .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
У кого-нибудь есть идеи по этому поводу?
Большое спасибо.