我有一个 WCF 服务扁平化 WSDL,另一端的消费者告诉我 nillable="true" 属性正在将它们连接起来。我尝试在服务合同中设置 EmitDefaultValue = false,但我没有注意到行为有任何变化。
诚然,我以前从未深入研究过这个级别的 WSDL 生成,所以我有点迷失。也许对下面发布的代码进行一些调整可以解决我的问题?如果我至少处于正确的位置,我会继续调查。
有没有一种简单的方法可以从我的 WSDL 中删除 nillable="true" 属性,这是否会产生意想不到的后果?谢谢!
public class FlatWsdl : IWsdlExportExtension, IEndpointBehavior
{
public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
{
XmlSchemaSet schemaSet = exporter.GeneratedXmlSchemas;
foreach (ServiceDescription wsdl in exporter.GeneratedWsdlDocuments)
{
List<XmlSchema> importsList = new List<XmlSchema>();
foreach (XmlSchema schema in wsdl.Types.Schemas)
{
AddImportedSchemas(schema, schemaSet, importsList);
}
wsdl.Types.Schemas.Clear();
foreach (XmlSchema schema in importsList)
{
RemoveXsdImports(schema);
wsdl.Types.Schemas.Add(schema);
}
}
}
...omitted the rest of FlatWsdl.cs for brevity...
}
没有直接简单的方法可以实现这一目标。你必须使用Wsdl导出器自己实施。是否会产生意想不到的后果取决于您的意图:-)
EDIT:
看看MSDN的例子IWSDL 导出扩展。它将使您能够准确地做您想做的事。诚然,要做好它有点麻烦,但你正在寻找正确的方向。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)