2017-06-18 69 views
0

我試圖在運行時生成wcf服務的代理類。 我通過附加訪問SVC網址「?WSDL」。 使用ServiceDiscription進口商類生成代理。Assembly.GetTypes()在動態加載程序集時返回null

我能夠生成代理,但無法訪問該類型的組件。

這裏我的代碼:

if(_proxyAssembly != null) 
{ 
    foreach (Type t in _proxyAssembly.GetTypes()) 
    { 
     //Some coding 
    } 
} 

GetTypes()應該返回所有類型的proxyAssembly類,但它返回空

回答

0

你應該甚至不想嘗試創建自己的代理生成。魔術在這裏,而是使用你想要的內置ChannelFactory。

http://www.c-sharpcorner.com/UploadFile/ff2f08/channel-factory-in-wcf/ http://www.dotnettricks.com/learn/wcf/difference-between-wcf-proxy-and-channel-factory

此外,你需要將所有您的客戶端需要訪問到一個單獨的組件,然後將客戶端,並通過標準的引用服務器之間共享的類和接口。所以,再次,你不需要處理反射來訪問這些類型。

編輯:

根據您在下面的評論,我會建議你使用Process.Start調用SvcUtil在運行時,有它產生的代理類,compile它變成一個裝配和load它在運行時。通過這種方式,您應該能夠通過反射來正確訪問所有類型,與您在示例中所做的幾乎相同。

+0

是的,但這裏的問題是,他們將僅在運行時提供URL。使用渠道工廠我需要合同細節。我必須創建一個應用程序,它能夠在運行時生成代理並調用該方法進行測試。 – User081288

+0

我不確定我們如何在運行時使用svcutil生成代理,您是否有任何示例?此測試客戶端應該是通用的,它應該接受任何服務URL並調用其方法。 – User081288

+0

您可以使用Process.Start()以您的案例的正確參數調用svcutil。 – dnickless