1
舊版本的WCF的是根據老版本的界面合同發現在WCF後服務合同的繼承
<endpoint name="ServiceName" address="http://production.server/Service.svc"
binding="basicHttpBinding" bindingConfiguration="myBasicHttpBinding"
contract="myAPI.IOriginalService" />
與新版本提供
<endpoint name="ServiceName" address="http://development.server/Service.svc"
binding="basicHttpBinding" bindingConfiguration="myBasicHttpBinding"
contract="myAPI.IDerivedService" />
這工作正常交付。舊客戶端可以通過詢問IOriginalService
連接到任一服務器,而新客戶端可以請求IDerivedService
...但他們只能向開發服務器詢問,如果他們詢問生產服務器,則會引發錯誤。這很好。
我寧願讓新客戶試圖有點聰明,儘管他們可以使用新格式,但如果它不可用,則使用舊格式。我可以抓住這個例外,但這很昂貴,我寧願做一個測試,也不願意發現已知的可能結果。
因此,我想連接到端點並詢問合同值,然後使用返回值來決定要請求的類型,例如,
var endPoint = someMethod("ServiceName");
var contractName = endPoint.WhatContractDoYouOffer();
if(contractName == "IOriginalService")
CallAMethod<IOriginalService>(parameters);
else
CallAMethod<IDerivedService>(newParameters);
這可行嗎?