4

Caching-Verhalten des letzten Dynamics SDK macht mich verrückt.Microsoft Dynamics CRM SDK CRMServiceClient Verbindungszeichenfolge Cache-Fehler

Wenn Sie zuerst mit CrmServiceClient auf verschiedene Umgebungen zugreifen möchten, müssen Sie den Parameter "RequireNewInstance = True" verwenden. in der Verbindungszeichenfolge. Wenn nicht, wird jede Instanz von CrmServiceClient dieselbe Verbindung verwenden, selbst wenn Sie Instanzen in verschiedenen Umgebungen erstellen und ablegen.

Jetzt, auch wenn Sie die "RequireNewInstance = True;" In der Verbindungszeichenfolge habe ich festgestellt, dass der Cache in einigen Szenarien immer noch auftritt.

var client1 = new CrmServiceClient(“RequireNewInstance=True; Url= https://myCompany.crm.dynamics.com ; [email protected]; 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 ; [email protected]; Password=myPassowrd; AuthType=Office365”);

Die client2 hält die erste Verbindungszeichenfolge, so dass Sie nicht feststellen können, ob die neue Verbindungszeichenfolge korrekt ist.

Irgendwelche Ideen, wie Dynamics Crm Verbindungen Zeichenfolgen richtig in meiner asp.net Anwendung zu testen?

Antwort

1

Ich denke, ich habe das Problem gefunden. Es scheint nur bei Online-Tests von Dynamics 365 zu kommen, das war der Grund, warum wir inkonsistente Ergebnisse in Abhängigkeit von der Umgebung erhielten.

Offenbar muss die URL nicht vollständig gültig sein, um eine Verbindung zu einer CRM Online-Testumgebung herzustellen, solange die Anmeldeinformationen gültig sind und die URL-Struktur beibehalten wird.

wir folgendes Beispiel:

var client1 = new CrmServiceClient(“RequireNewInstance=True; Url= https://fake.crm.dynamics.com ; [email protected]; Password=myPassowrd; AuthType=Office365”);

In diesem Fall habe ich die „fake“ Teil der URL mit dem, was ich will, aber immer noch ausführen Anfragen korrekt mit dem CrmServiceClient Service ersetzen können.

Wenn ich versuche, dies mit einer anderen Umgebung (z. B. 2015, vor Ort, nicht-crm online usw.) zu tun, würde die IsReady-Eigenschaft des CrmServiceClient false zurückgeben und ich würde einen Fehler in der LastCrmError-Eigenschaft erhalten.

Sehr seltsames Verhalten, und schwer zu lokalisieren. Nun, da ich glaube, dass ich das widersprüchliche Verhalten verstehe, weiß ich, dass es letztlich unsere Kunden nicht betrifft, daher werde ich diese Antwort als Antwort markieren, auch wenn ich immer noch nicht weiß, warum wir ein unterschiedliches Verhalten zwischen einer Testumgebung und einer normalen Umgebung haben.

1

Ich stimme zu wählen, die vorhandene Verbindung wieder zu verwenden, wenn Sie nicht RequireNewInstance=true scheint nicht intuitiv, aber ich kann nicht reproduzieren, was Sie sehen. Wenn ich Folgendes von LinqPad versuchen crmSvcClient2 wird Fehler ausdrucken und dann eine Null ref auf den Aufruf ausführen (8.2.0.2 Version des SDK). Mit dieser Version des SDK sollten Sie nach der Verbindung immer überprüfen LastCrmError, um festzustellen, ob die Verbindung fehlgeschlagen ist.

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(); 
} 

enter image description here

+0

Danke für die Antwort von Matt. Versuchen Sie, die exakt gleiche Verbindungszeichenfolge zu verwenden, aber ändern Sie nur die URL von der echten zur falschen. Das heißt, halten Sie den Benutzer und das Passwort in crmSvcClient verwendet. Sie sollten das Verhalten, das ich erfahre – Marcos

+0

@Marcos hmmm bekommen ... das ist, was ich getan habe. Die erste Verbindung war korrekt, während die zweite die korrekten Benutzeranmeldeinformationen, aber einen falschen Organisationsnamen hat. –

+0

Ich versuchte es erneut, in verschiedenen Clients, mit x64 und x86 nur für den Fall, auch nach der gleichen Verbindungsstring Struktur, um völlig sicher zu sein, und ich bekomme das gleiche falsche Verhalten.Ich habe sogar versucht, einige Arbeitsprobe auf .net Geige zu setzen, aber ich konnte nicht, weil ein Problem mit den Abhängigkeiten der Pakete. Also, Sie haben genau die gleiche Verbindungszeichenfolge, mit nur einem URL-Unterschied (z. B. http://xxx.crm.dynamics.com), der erste CrmServiceClient verbindet und der zweite nicht? – Marcos

Verwandte Themen