掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
WCF經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,使用它的人越來(lái)越多,它的功能也隨之的強(qiáng)大,就我的經(jīng)驗(yàn)來(lái)處理編程中WCF元數(shù)據(jù)。應(yīng)用程序需要獲取服務(wù)終結(jié)點(diǎn)的元數(shù)據(jù),查看是否存在至少一個(gè)終結(jié)點(diǎn)支持請(qǐng)求的契約。如如果元數(shù)據(jù)交換終結(jié)點(diǎn)是服務(wù)支持的,或者基于HTTP-GET協(xié)議,那么元數(shù)據(jù)在這個(gè)終結(jié)點(diǎn)中就是可用的。當(dāng)我們使用HTTP-GET協(xié)議時(shí),元數(shù)據(jù)交換的地址就是HTTP-GET 地址(通常,服務(wù)的基地址以?wsdl為后綴)。

支持WCF元數(shù)據(jù)處理的類(lèi)型
- public enum MetadataExchangeClientMode
- {
- MetadataExchange,
- HttpGet
- }
- class MetadataSet : ...
- {...}
- public class ServiceEndpointCollection : Collection
- {...}
- 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ù)交換關(guān)聯(lián)的綁定,該元數(shù)據(jù)交換保存在應(yīng)用程序的配置文件中。我們也可以將初始化后的綁定實(shí)例傳遞給MetadataExchange-Client的構(gòu)造函數(shù)。傳遞的綁定實(shí)例包含一些自定義值,例如容量。如果返回的元數(shù)據(jù)超過(guò)默認(rèn)的接收消息大小時(shí),為了接收更大的消息,就可以設(shè)置容量值。
#T#MetadataExchangeClient的GetMetadata()方法接收一個(gè)終結(jié)點(diǎn)地址實(shí)例,它封裝了元數(shù)據(jù)交換地址以及一個(gè)枚舉值,指定了訪問(wèn)的方式。方法返回的元數(shù)據(jù)放在一個(gè)MetadataSet實(shí)例中。我們不需要直接操作 MetadataSet類(lèi)型,而是創(chuàng)建MetadataImporter類(lèi)的子類(lèi)實(shí)例,例如WsdlImporter,將原來(lái)的元數(shù)據(jù)傳遞給它的構(gòu)造函數(shù),然后調(diào)用ImportAllEndpoints()方法,獲取在元數(shù)據(jù)中查找到的所有終結(jié)點(diǎn)的集合。終結(jié)點(diǎn)以ServiceEndpoint類(lèi)型方式表示。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流