這幾天在做給WCF做加密傳輸,結果當然是實現了加密傳輸,同時也發現了一個問題,有沒有大神來答疑解惑一下. 事情是這樣的. 在客戶端的配置中,需要加入一個behavior,在config文件中是這樣的. 按理說,任何在config的配置,都是可以寫代碼來實現的.這裡寫代碼實現,我覺得又可以分兩種: 因 ...
這幾天在做給WCF做加密傳輸,結果當然是實現了加密傳輸,同時也發現了一個問題,有沒有大神來答疑解惑一下.
事情是這樣的.
在客戶端的配置中,需要加入一個behavior,在config文件中是這樣的.
<behaviors> <endpointBehaviors> <behavior name="wsHttpBindingBehavior"> <clientCredentials > <serviceCertificate > <authentication certificateValidationMode="None" /> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
按理說,任何在config的配置,都是可以寫代碼來實現的.這裡寫代碼實現,我覺得又可以分兩種:
- 寫代碼修改config的配置
- 寫代碼構造wcf的client.
因為我遇到這個需要修改的地方,Client已經部署了幾千套,要一個一個去修改Client的配置,是很麻煩而且不科學的一件事情.幸好,程式架構能自動升級,只需要在升級的時候,用代碼將behavior寫到配置文件就可以了.聽起來很完美.
可是呢,要把上面這段配置自動加到config中,我卻找了幾天都沒有實現.情況如下:
- 利用Configuration類,增加behaviors節點,未到修改方法
- 利用代碼修改在構造client的時候,只有通過System.ServiceModel.ClientBase<T>這種方式來修改,下麵這段代碼就可以
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
3.可是現有代碼框架不是用的ClientBase<T>,而是ChannelFactory<T>()方法創建的通道, ChannelFactory<T>()沒有找到增加這個behaviors的方式.修改ChannelFactory變成ClientBase,現在這項目不可行,修改太大.
4.當然,還有一種方法就是把config文件當成xml文件來處理,這是最後的大招了.暫時不想用.
不知道能不能被人看到,反正每次都說我不能上首頁.