WCF自定义WSDL部分

时间:2013-10-03 08:38:32

标签: wcf wsdl custom-sections

如何将自定义部分添加到直接位于wsdl:definitions下的WSDL?像这样的东西: Custom WSDL section 我尝试过使用实现IWsdlExportExtension的自定义属性,但我还没有接近我需要的结果,我不确定这是否是正确的方法。 这是可能的还是我应该将该部分粘贴到文件中并在web.config中指定externalMetadataLocation?

1 个答案:

答案 0 :(得分:1)

你问题中的wsdl来自asmx。如果你想做同样的事情,你应该使用IVIS库并用ISService attrubute装饰你的类。对于WCF,你应该做下一步:

        [CustomAttribute]
        public class Service1 : IService1
        {
           public void DoWork()
           {
           }
        }
     public class CustomAttribute:Attribute,  System.ServiceModel.Description.IWsdlExportExtension, System.ServiceModel.Description.IWsdlImportExtension, IContractBehavior
   {
            public void ExportContract(System.ServiceModel.Description.WsdlExporter exporter, System.ServiceModel.Description.WsdlContractConversionContext context)
        {
        BeforeImport(exporter.GeneratedWsdlDocuments, exporter.GeneratedXmlSchemas, new  List<XmlElement>());
        }
     public void  BeforeImport(System.Web.Services.Description.ServiceDescriptionCollection wsdlDocuments, System.Xml.Schema.XmlSchemaSet xmlSchemas, ICollection<XmlElement> policy)
     {
    //throw new NotImplementedException();

        var xdoc = new XmlDocument();
        var element = xdoc.CreateElement("ivis","WebServiceInfo", "ivis");
        var node = xdoc.CreateNode(XmlNodeType.Element, "Identifier", "ivis");
        node.InnerText = "URN:IVIS:100001:ISS-IeM";
        element.AppendChild(node);
        /// and so on :)
        wsdlDocuments[0].Extensions.Add(element);

     }
}

实现接口的所有其他方法的主体可以为空。 这是第一种方法。