很多從事D365研發工做的朋友,可能或多或少都經歷過這麼一種狀況,使用CrmServiceClient對象初始化一個實例,而後發現OrganizationServiceProxy對象是null。不只如此,還可能碰到的狀況是封裝好的Common構造,鏈接一個CRM環境時好用,可是鏈接另外一個卻很差用。下面是針對這樣的狀況,總結的一些注意事項,用以嘗試解決問題:ui
1. TLS1.2的指定是否添加了。對於使用最新版本CRM dll的開發來講,這不是個問題,由於.Net Framework 4.6.2已經把TLS1.2做爲默認選項了。可是若是你的版本仍是舊的,那麼就須要明確指定它了,具體的指定方式是這樣的:code
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
2. 通常咱們在初始化CrmServiceClient對象的時候呢,傳入的參數是一個ConnectionString。這個ConnectionString長什麼樣,你們能夠上網查。這裏我要說的是String裏有幾個參數須要注意,一個Domain,一個Username,還有個authType。對象
a. 在鏈接OP環境的時候,建議使用Domain和Username都帶上的String做爲參數;在鏈接OL環境的時候,建議僅使用Username參數,而且賦值方式爲xxx@xxx的格式blog
b. 無論哪一種鏈接方式,ConnectionString都帶上authType參數,並正確賦值開發
3. dll版本升級或者.Net Framework升級,更具體點就是對dll以及.Net Framework版本匹配的檢查get
無論是dll版本改變仍是Framework版本變化,都須要注意新版本的dll對.Net Framework的要求,還有對依賴項dll的要求。舉個最近碰到的例子,最新版本的CRM dll須要Framework的版本是4.6.2,在把Framework升級之後,發現ServiceProxy是null,通過一系列的排查以後,發現是某些系統dll的引用版本太低,以及nuget上以前添加的其餘dll版本太低致使的,可是這些問題都不會在build階段給你暴露出來。it
若是碰到1和2都知足的狀況下,ServiceProxy仍是構造失敗,那麼看看error message是若是描述失敗緣由的。在構造CrmServiceClient對象以後,若是存在什麼異常信息,通常會在LastCrmException屬性裏暴露出來,因此還能夠看看這裏的信息來診斷問題。io
目前博主碰到的問題大體是這幾個方面的,若是再遇到其餘狀況,會繼續進行更新。ast