示例#1
0
		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);
				}
			}
		}