namespace FlatWSDL
{
public class FlatWsdlBefavior : BehaviorExtensionElement,
IWsdlExportExtension, IEndpointBehavior
{
public void ExportContract(WsdlExporter exporter,
WsdlContractConversionContext context)
{
}
public void ExportEndpoint(WsdlExporter exporter,
WsdlEndpointConversionContext context)
{
XmlSchemaSet schemaSet = exporter.GeneratedXmlSchemas;
foreach (System.Web.Services.Description.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);
}
}
}
private void AddImportedSchemas(XmlSchema schema,
XmlSchemaSet schemaSet, List<XmlSchema> importsList)
{
foreach (XmlSchemaImport import in schema.Includes)
{
ICollection realSchemas =
schemaSet.Schemas(import.Namespace);
foreach (XmlSchema ixsd in realSchemas)
{
if (!importsList.Contains(ixsd))
{
importsList.Add(ixsd);
AddImportedSchemas(ixsd,
schemaSet,
importsList);
}
}
}
}
private void RemoveXsdImports(XmlSchema schema)
{
for (int i = 0; i < schema.Includes.Count; i++)
{
if (schema.Includes[i] is XmlSchemaImport)
schema.Includes.RemoveAt(i--);
}
}
public void AddBindingParameters(ServiceEndpoint endpoint,
BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint,
ClientRuntime clientRuntime)
{
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint,
EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
//To enable using configuration extention to use this behavior
public override Type BehaviorType
{
get { return this.GetType(); }
}
//To enable using configuration extention to use this behavior
protected override object CreateBehavior()
{
return new FlatWsdlBefavior();
}
}
}