void ImportPolicy (WSBinding binding, ServiceEndpoint endpoint) { var context = new Description.CustomPolicyConversionContext (binding, endpoint); var assertions = context.GetBindingAssertions (); foreach (var ext in binding.Extensions) { var xml = ext as XmlElement; if (xml == null) continue; if (!xml.NamespaceURI.Equals (Constants.WspNamespace)) continue; if (xml.LocalName.Equals ("Policy")) { context.AddPolicyAssertion (xml); continue; } if (!xml.LocalName.Equals ("PolicyReference")) continue; var uri = xml.GetAttribute ("URI"); if (!uri.StartsWith ("#")) { // FIXME AddWarning ( "Failed to resolve unknown policy reference `{0}' for " + "binding `{1}'.", uri, binding.Name); continue; } foreach (var sext in binding.ServiceDescription.Extensions) { var sxml = sext as XmlElement; if (sxml == null) continue; if (!sxml.NamespaceURI.Equals (Constants.WspNamespace)) continue; if (!sxml.LocalName.Equals ("Policy")) continue; var id = sxml.GetAttribute ("Id", Constants.WsuNamespace); if (!uri.Substring (1).Equals (id)) continue; context.AddPolicyAssertion (sxml); } } foreach (IPolicyImportExtension extension in PolicyImportExtensions) { try { extension.ImportPolicy (this, context); } catch (Exception ex) { AddWarning ( "PolicyImportException `{0}' threw an exception while " + "trying to import policy references for endpoint `{1}': {2}", extension.GetType ().Name, endpoint.Name, ex.Message); } } }