我有一個有趣的問題,它超越了我的C#舒適區。通過使用WsdlImporter和CodeDomProvider類動態檢查Web服務WSDL,我可以生成並編譯客戶端代理代碼到程序集到Web服務。這包括聲明如下服務客戶端類:C#cast泛型類型
public partial class SomeServiceClient : System.ServiceModel.ClientBase<ISomeService>, ISomeService {...}
注意,客戶端類和ISomeService合同名稱的名稱是動態的 - 我不知道他們提前。我可以實例化這個類動態使用的對象:
string serviceClientName = "SomeServiceClient";// I derive this through some processing of the WSDL
object client = webServiceAssembly.CreateInstance(serviceClientName , false, System.Reflection.BindingFlags.CreateInstance, null, new object[] { serviceEndpoint.Binding, serviceEndpoint.Address }, System.Globalization.CultureInfo.CurrentCulture, null);
但是,如果我需要在這個客戶端類設置ClientCredentials,那麼我可以不知道如何做到這一點。我認爲我可以將客戶端對象轉換爲System.ServiceModel.ClientBase泛型類,然後引用ClientCredentials屬性。但是,下面的編譯但無法在運行:
System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential(username, password, domain);
((System.ServiceModel.ClientBase<IServiceChannel>)client).ClientCredentials.Windows.ClientCredential = networkCredential;
是否有某種方式來動態指定演員,或者是有一些方法來設置憑據沒有這個投?謝謝你的幫助!馬丁
可以請你分享你得到的例外嗎? – Artak 2012-07-24 03:45:19
恐怕我現在不在我的開發機器中,但是從內存中,異常是這樣的:SomeServiceClient不能轉換爲System.ServiceModel.ClientBase –
user304582
2012-07-24 04:50:08
嗨 - 這裏是異常的確切形式:無法轉換類型'SomeServiceClient'的對象以鍵入'System.ServiceModel.ClientBase'1 [System.ServiceModel.IClientChannel]'。 – user304582 2012-07-24 14:39:12