簡體   English   中英

Microsoft Dynamics CRM SDK CRMServiceClient連接字符串緩存錯誤

[英]Microsoft Dynamics CRM SDK CRMServiceClient connection string cache bug

最后一個Dynamics SDK的緩存行為讓我發瘋。

首先,如果要使用CrmServiceClient訪問不同的環境,則必須使用參數RequireNewInstance=True; 在連接字符串中。 如果沒有,即使您創建實例並將實例部署到不同的環境,CrmServiceClient的每個實例都將使用相同的連接。

現在,即使你使用RequireNewInstance=True; 在連接字符串中,我發現在某些情況下仍然會出現緩存。

var client1 = new CrmServiceClient("RequireNewInstance=True;
Url=https://myCompany.crm.dynamics.com;
Username=myUser@myCompany.onmicrosoft.com; Password=myPassowrd;
AuthType=Office365");

//Now, client 2 points to a url that doesn’t exists:
var client2 = new CrmServiceClient("RequireNewInstance=True; 
Url=https://xxx.crm.dynamics.com; Username=myUser@myCompany.onmicrosoft.com; 
Password=myPassowrd; AuthType=Office365");

client2繼續使用第一個連接字符串,因此您無法確定新連接字符串是否正確。

有關如何在我的asp.net應用程序中正確測試Dynamics Crm連接字符串的任何想法?

我想我發現了這個問題。 它似乎只發生在Dynamics 365在線試驗中,這就是我們根據環境獲得不一致結果的原因。

顯然,只要憑證有效並且保留了url結構,url就不需要完全有效建立與CRM在線試用環境的連接。

讓我們考慮以下示例:

var client1 = new CrmServiceClient("RequireNewInstance=True; 
Url=https://fake.crm.dynamics.com; 
Username=myUser@myCompany.onmicrosoft.com; Password=myPassowrd; 
AuthType=Office365");

在這種情況下,我可以用我想要的任何東西替換url的“假”部分,但仍然使用CrmServiceClient服務正確​​執行請求。

如果我嘗試在另一個環境中執行此操作(例如2015,on premise,not-trial crm online等),CrmServiceClient的IsReady屬性將返回false,並且我將在LastCrmError屬性中收到錯誤。

很奇怪的行為,很難精確定位。 現在,我認為我理解不一致的行為,我知道最終它不會影響我們的客戶,所以即使我仍然不知道為什么我們在試驗和正常環境之間有不同的行為,我會將此響應標記為答案。

我同意如果你不包括RequireNewInstance=true就選擇重用現有連接似乎反直覺,但我無法重現你所看到的。 如果我嘗試以下方法從LinqPad crmSvcClient2將打印出的錯誤,然后扔在執行調用(8.2.0.2版本的SDK)空REF。 使用此版本的SDK,您需要在連接后始終檢查LastCrmError以查看連接是否失敗。

var connectionString = @"AuthType=Office365;Url=https://REAL.crm.dynamics.com;Username=USERNAME;Password=PASSWORD;RequireNewInstance=True;";
var connectionString2 = @"AuthType=Office365;Url=https://FAKE.crm.dynamics.com;Username=USERNAME;Password=PASSWORD;RequireNewInstance=True;";   

using (var crmSvcClient = new CrmServiceClient(connectionString))
{
    "crmSvcClient".Dump();
    crmSvcClient.LastCrmError.Dump();
    ((WhoAmIResponse)crmSvcClient.Execute(new WhoAmIRequest())).OrganizationId.Dump();
    crmSvcClient.ConnectedOrgFriendlyName.Dump();


}
using (var crmSvcClient2 = new CrmServiceClient(connectionString2))
{
    "crmSvcClient2".Dump();
    crmSvcClient2.LastCrmError.Dump();
    ((WhoAmIResponse)crmSvcClient2.Execute(new WhoAmIRequest())).OrganizationId.Dump();
    crmSvcClient2.ConnectedOrgFriendlyName.Dump();
}

在此輸入圖像描述

延遲回復,但您看到的行為是因為當您指定錯誤的URL時,發現服務用於確定要連接的實例。 要防止這種情況,請在連接字符串中指定SkipDiscovery = True:

var connectionString2 = @"AuthType=Office365;Url=https://FAKE.crm.dynamics.com;Username=USERNAME;Password=PASSWORD;RequireNewInstance=True;SkipDiscovery=True;";

編輯:默認情況下,SkipDiscovery為真,從9.0.7開始,贊成@mwardm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM