這幾天在做給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檔案來處理,這是最後的大招了.暫時不想用.
不知道能不能被人看到,反正每次都說我不能上首頁.