PolicyConversionContext.GetBindingAssertions 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
從中繼資料取得原則判斷提示的集合。
public:
abstract System::ServiceModel::Description::PolicyAssertionCollection ^ GetBindingAssertions();
public abstract System.ServiceModel.Description.PolicyAssertionCollection GetBindingAssertions ();
abstract member GetBindingAssertions : unit -> System.ServiceModel.Description.PolicyAssertionCollection
Public MustOverride Function GetBindingAssertions () As PolicyAssertionCollection
傳回
包含繫結原則判斷提示的型別 ICollection<T> 的 XmlElement。
範例
下列程式碼範例會示範將所有原則判斷提示寫入主控台的 ImportPolicy 方法的實作。 程式碼註解會描述如何找出特定的自訂原則判斷提示、建立及插入實作的繫結項目以及從集合移除判斷提示。
public void ImportPolicy(MetadataImporter importer,
PolicyConversionContext context)
{
Console.WriteLine("The custom policy importer has been called.");
foreach (XmlElement assertion in context.GetBindingAssertions())
{
Console.WriteLine(assertion.NamespaceURI + " : " + assertion.Name);
// locate a particular assertion by Name and NamespaceURI
XmlElement customAssertion = context.GetBindingAssertions().Find(name1, ns1);
if (customAssertion != null)
{
// Found assertion; remove from collection.
context.GetBindingAssertions().Remove(customAssertion);
Console.WriteLine(
"Removed our custom assertion from the imported "
+ "assertions collection and inserting our custom binding element."
);
// Here if you find the custom policy assertion that you are looking for,
// add the custom binding element that handles the functionality that the policy indicates.
// Attach it to the PolicyConversionContext.BindingElements collection.
// For example, if the custom policy had a "speed" attribute value:
/*
string speed
= customAssertion.GetAttribute(SpeedBindingElement.name2, SpeedBindingElement.ns2);
SpeedBindingElement e = new SpeedBindingElement(speed);
context.BindingElements.Add(e);
*/
}
// write assertion name in red.
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(assertion.NamespaceURI + " : " + assertion.Name);
//write contents in gray.
Console.WriteLine(assertion.OuterXml);
Console.ForegroundColor = ConsoleColor.Gray;
}
}
下列程式碼範例會示範如何使用 IPolicyImportExtension 組態區段來註冊 <policyImporters>
實作。
<configuration>
<system.serviceModel>
<client>
<metadata>
<policyImporters>
<extension type="CustomPolicyImporter, assembly"/>
</policyImporters>
</metadata>
</client>
</system.serviceModel>
</configuration>
下列程式碼範例會示範自訂繫結項目如何實作 IPolicyExportExtension,以將自訂原則判斷提示附加至繫結判斷提示。
public class MyBindingElement : BindingElement, IPolicyExportExtension
{
// BindingElement implementation . . .
public void ExportPolicy(
MetadataExporter exporter, PolicyConversionContext context)
{
XmlDocument xmlDoc = new XmlDocument();
XmlElement xmlElement =
xmlDoc.CreateElement("MyPolicyAssertion");
context.GetBindingAssertions().Add(xmlElement);
}
// Note: All custom binding elements must return a deep clone
// to enable the run time to support multiple bindings using the
// same custom binding.
public override BindingElement Clone()
{
// this is just a placeholder
return null;
}
// Call the inner property.
public override T GetProperty<T>(BindingContext context)
{
return context.GetInnerProperty<T>();
}
}
public class Program {
public static void Main(string[] args) {
EndpointAddress address =
new EndpointAddress("http://localhost/metadata");
CustomBinding customBinding =
new CustomBinding(new BasicHttpBinding());
customBinding.Elements.Add(new MyBindingElement());
ContractDescription contract =
ContractDescription.GetContract(typeof(MyContract));
ServiceEndpoint endpoint =
new ServiceEndpoint(contract, customBinding, address);
MetadataExporter exporter = new WsdlExporter();
exporter.ExportEndpoint(endpoint);
}
}
備註
從 GetBindingAssertions 傳回的集合不是複本。 您可以依需要加入及移除判斷提示。