詳細介紹WCF元數(shù)據(jù)
WCF經過長時間的發(fā)展,使用它的人越來越多,它的功能也隨之的強大,就我的經驗來處理編程中WCF元數(shù)據(jù)。應用程序需要獲取服務終結點的元數(shù)據(jù),查看是否存在至少一個終結點支持請求的契約。如如果元數(shù)據(jù)交換終結點是服務支持的,或者基于HTTP-GET協(xié)議,那么元數(shù)據(jù)在這個終結點中就是可用的。當我們使用HTTP-GET協(xié)議時,元數(shù)據(jù)交換的地址就是HTTP-GET 地址(通常,服務的基地址以?wsdl為后綴)。
支持WCF元數(shù)據(jù)處理的類型
- public enum MetadataExchangeClientMode
- {
- MetadataExchange,
- HttpGet
- }
- class MetadataSet : ...
- {...}
- public class ServiceEndpointCollection : Collection<ServiceEndpoint>
- {...}
- public class MetadataExchangeClient
- {
- public MetadataExchangeClient();
- public MetadataExchangeClient(Binding mexBinding);
- public MetadataSet GetMetadata(Uri address,MetadataExchangeClientMode mode);
- //更多成員
- }
- public abstract class MetadataImporter
- {
- public abstract ServiceEndpointCollection ImportAllEndpoints();
- //更多成員}
- public class WsdlImporter : MetadataImporter
- {
- public WsdlImporter(MetadataSet metadata);
- //更多成員
- }
- public class ServiceEndpoint
- {
- public EndpointAddress Address
- {get;set;}
- public Binding Binding
- {get;set;}
- public ContractDescription Contract
- {get;}
- //更多成員
- }
- public class ContractDescription
- {
- public string Name
- {get;set;}
- public string Namespace
- {get;set;}
- //更多成員
- }
MetadataExchangeClient能夠使用與WCF元數(shù)據(jù)交換關聯(lián)的綁定,該元數(shù)據(jù)交換保存在應用程序的配置文件中。我們也可以將初始化后的綁定實例傳遞給MetadataExchange-Client的構造函數(shù)。傳遞的綁定實例包含一些自定義值,例如容量。如果返回的元數(shù)據(jù)超過默認的接收消息大小時,為了接收更大的消息,就可以設置容量值。
#T#MetadataExchangeClient的GetMetadata()方法接收一個終結點地址實例,它封裝了元數(shù)據(jù)交換地址以及一個枚舉值,指定了訪問的方式。方法返回的元數(shù)據(jù)放在一個MetadataSet實例中。我們不需要直接操作 MetadataSet類型,而是創(chuàng)建MetadataImporter類的子類實例,例如WsdlImporter,將原來的元數(shù)據(jù)傳遞給它的構造函數(shù),然后調用ImportAllEndpoints()方法,獲取在元數(shù)據(jù)中查找到的所有終結點的集合。終結點以ServiceEndpoint類型方式表示。