Frage

Ich habe den Domänenbenutzer 'JSmith' in Active Directory erstellt und dieses Domain -Konto als Benutzer in Dynamics CRM hinzugefügt. Mein Ziel hier ist es, Code mit einem Servicekonto auszuführen, das in der Privusergroup für die Organisation liegt und gleichzeitig "JSmith" verkörpert. Ich instanziiere den CRMDatacontext, indem ich ihn eine Instanz der CRMConnection übergeben habe. Wenn ich den Konstruktor der CRMConnection aufruft habe, übergende ich ihm den Namen meiner Verbindungszeichenfolge in der Anwendungskonfigurationsdatei, dann habe ich die ImpotatedUser -Eigenschaft auf die Systembenutzer -ID von 'JSmith' gesetzt. Eine Sache zu beachten ist, dass ich eine Konsolenanwendung verwende, um dies auszuführen. Sehen Sie sich meinen Code unten an:

Verbindungszeichenfolge in app.config:

<add name="Crm" connectionString="Authentication Type=AD; Server=http://dev01/myorg; User ID=myorgdomain\sv-crm; Password=password123" />

CRMDATACONTEXT- und GETENTENTENDES CODE:

var connection = new CrmConnection("Crm");
connection.ImpersonatedUser = Guid.Parse("1937F45C-8EB4-E011-8FE4-005056887B79");

var crm = new CrmDataContext(connection);
var contacts = crm.GetEntities("contacts")

if(contacts.Count() > 0)  //the call to Count() is where the error gets thrown. Invalid user auth.
  //do something

Ich habe keine Probleme, wenn ich versuche, mich mit meiner eigenen Systembenutzer -ID auszugeben, die an mein AD -Domain -Konto gebunden ist, das ich während der Ausführung der Tests angemeldet bin. Ich erhalte die Ergebnisse wieder gut, also weiß ich, dass es kein Problem mit dem Servicekonto gibt, mit dem der Code ausgeführt wird. Ich habe derselben Geschäftseinheit sogar 'JSmith' zugewiesen und ihn in die gleichen Rollen eingebracht, in denen ich bin (das ist Systemadministrator), und ich bekomme immer noch den ungültigen Benutzerauth. Was könnte ich möglicherweise vermissen? Nachfolgend finden Sie Fehlerinformationen in der Trace -Datei auf dem Server. In den TRACE-Informationen unten ist die erste Zeile: [2011-07-22 18: 14: 08.0] Prozess: W3WP | Organisation: F827DEB3-C6CC-DF11-BC07-00505687B79 | Thread: 6 | Kategorie: Ausnahme |Benutzer: 822138F1-C574-E011-9DCA-005056887B79 | Ebene: Fehler | CrMexception..ctor*". Die Anzeige der Benutzer -ID ist meine Systembenutzer -ID. Es scheint, als würde sie die ID des Servicekontos aus der Verbindungszeichenfolge oder die ID 'Jblow' angezeigt, die verkörpert wird. Alle Ideen würden würden sehr geschätzt sein.

[2011-07-22 18:14:08.0] Process: w3wp |Organization:f827deb3-c6cc-df11-bc07-005056887b79 |Thread:    6 |Category: Exception |User: 822138f1-c574-e011-9dca-005056887b79 |Level: Error | CrmException..ctor
at CrmException..ctor(Int32 errorCode, Object[] arguments)
at SecurityHelper.VerifyAndReturnCurrentCallerId(Guid userId, Guid callerId, Guid orgId)
at CrmWebService.get_CurrentCallerId()
at CrmService.Execute(Request request)
at RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at LogicalMethodInfo.Invoke(Object target, Object[] values)
at WebServiceHandler.Invoke()
at WebServiceHandler.CoreProcessRequest()
at SyncSessionlessHandler.ProcessRequest(HttpContext context)
at CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
at ApplicationStepManager.ResumeSteps(Exception error)
at HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
at HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr)
at ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType)
>Crm Exception: Message: Invalid user auth., ErrorCode: -2147220988
[2011-07-22 18:14:08.0] Process: w3wp |Organization:f827deb3-c6cc-df11-bc07-005056887b79 |Thread:    6 |Category: Platform.Sdk |User: 822138f1-c574-e011-9dca-005056887b79 |Level: Error |   CompositeSoapExtensionExceptionHandler.Handle
at CompositeSoapExtensionExceptionHandler.Handle(Stream to, Stream from, Exception exception)
at CrmAuthenticationSoapExtensionBase.ProcessMessage(SoapMessage message)
at SoapMessage.RunExtensions(SoapExtension[] extensions, Boolean throwOnException)
at SoapServerProtocol.WriteException(Exception e, Stream outputStream)
at WebServiceHandler.WriteException(Exception e)
at WebServiceHandler.Invoke()
at WebServiceHandler.CoreProcessRequest()
at SyncSessionlessHandler.ProcessRequest(HttpContext context)
at CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
at ApplicationStepManager.ResumeSteps(Exception error)
at HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
at HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr)
at ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType)
>CrmSoapExtension detected CrmException:
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> Microsoft.Crm.CrmException: Invalid user auth.
at Microsoft.Crm.Sdk.SecurityHelper.VerifyAndReturnCurrentCallerId(Guid userId, Guid callerId, Guid orgId)
at Microsoft.Crm.WebServices.Crm2007.CrmWebService.get_CurrentCallerId()
at Microsoft.Crm.Sdk.Crm2007.CrmService.Execute(Request request)
--- End of inner exception stack trace --- 

Update 7/25: Ich habe beschlossen, einen Test durchzuführen, indem ich einen Anruf tätige, als hätte ich den CRMDatacontext durchgeführt, in dem die crmConnection.impersonateduser auf die JSmith -ID eingestellt ist. Dann habe ich einen weiteren Anruf (genau gleiche Abfrage) unter Verwendung des alten School -Ansatzes getätigt, bei dem Sie die QueryExpression aufbauen und in den CRMService übergeben, in dem die Callerid -Eigenschaft des crmauthenticationTokens auf den ID für JSmith eingestellt ist. Die Verwendung von crmdatacontext ist mit dem Fehler "Ungültiger Benutzerauth" fehlgeschlagen, aber der andere Aufruf mit dem CRMService und QueryExpression lief gut. Ich habe Fiddler verwendet, um die RAW -HTTP -Anfrage für jeden dieser Anrufe zu betrachten. Die rohe Anfrage war genau die gleiche für beide Anrufe, mit Ausnahme von einer Sache .... Das Verhandlungs -Token in der Autorisierungsheader der Anfrage. Ich habe beide Anrufe, eine direkt nach dem anderen, in meiner Konsolen -App getätigt und sie produzieren verschiedene Verhandlungs -Token. Das muss das Problem sein, obwohl ich nicht weiß, wie ich behoben werden soll. Es scheint, als wäre dies ein Fehler in den erweiterten Entwicklererweiterungen. Nachfolgend finden Sie die rohen HTTP für beide.

--using CrmDataContext
POST http://myserver/MSCRMServices/2007/CrmService.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.235)
VsDebuggerCausalityData: uIDPo6mcKDyuc+pPqk3LRv81TrIAAAAA/j8K/SLE5EivZ+mzg1+doYkmNLjkHbFHmbD9UyYmHFEACQAA
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://schemas.microsoft.com/crm/2007/WebServices/Execute"
Accept-Encoding: gzip,gzip
Authorization: Negotiate YIIIrgYGKwYBBQUCoIIIojCCCJ6g.....
Host: myserver
Content-Length: 1281
Expect: 100-continue

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<CrmAuthenticationToken xmlns="http://schemas.microsoft.com/crm/2007/WebServices">
<AuthenticationType xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">0</AuthenticationType>
<OrganizationName xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">myorg</OrganizationName>
<CallerId xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">1937f45c-8eb4-e011-8fe4-005056887b79</CallerId>
</CrmAuthenticationToken>
</soap:Header>
<soap:Body>
<Execute xmlns="http://schemas.microsoft.com/crm/2007/WebServices">
<Request xsi:type="RetrieveMultipleRequest" ReturnDynamicEntities="true">
<Query xmlns:q1="http://schemas.microsoft.com/crm/2006/Query" xsi:type="q1:QueryExpression">
<q1:EntityName>contact</q1:EntityName>
<q1:ColumnSet xsi:type="q1:AllColumns" />
<q1:Distinct>false</q1:Distinct>
<q1:PageInfo>
<q1:PageNumber>1</q1:PageNumber>
<q1:Count>100</q1:Count>
</q1:PageInfo>
<q1:LinkEntities />
<q1:Criteria>
<q1:FilterOperator>And</q1:FilterOperator>
<q1:Conditions />
<q1:Filters />
</q1:Criteria>
<q1:Orders />
</Query>
</Request>
</Execute>
</soap:Body>
</soap:Envelope>


--call using CrmService with QueryExpression
POST http://myserver/MSCrmServices/2007/CrmService.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.235)
VsDebuggerCausalityData: uIDPo8cVsRu/YZBCl+8cnC9j5fwAAAAAGni8rU7A/Uy4JYm/bi/S6d/soXPiw+xBoKSYCD/1KRIACQAA
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://schemas.microsoft.com/crm/2007/WebServices/Execute"
Authorization: Negotiate YIIG5wYGKwYBBQUCoIIG2zCCBtegMDAuBgkqhk.....
Host: myserver
Content-Length: 1219
Expect: 100-continue

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-        instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<CrmAuthenticationToken xmlns="http://schemas.microsoft.com/crm/2007/WebServices">
<AuthenticationType xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">0</AuthenticationType>
<OrganizationName xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">myorg</OrganizationName>
<CallerId xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">1937f45c-8eb4-e011-8fe4-005056887b79</CallerId>
</CrmAuthenticationToken>
</soap:Header>
<soap:Body>
<Execute xmlns="http://schemas.microsoft.com/crm/2007/WebServices">
<Request xsi:type="RetrieveMultipleRequest" ReturnDynamicEntities="false">
<Query xmlns:q1="http://schemas.microsoft.com/crm/2006/Query" xsi:type="q1:QueryExpression">
<q1:EntityName>contact</q1:EntityName>
<q1:ColumnSet xsi:type="q1:AllColumns" />
<q1:Distinct>false</q1:Distinct>
<q1:PageInfo>
<q1:PageNumber>1</q1:PageNumber>
<q1:Count>100</q1:Count>
</q1:PageInfo>
<q1:Criteria>
<q1:FilterOperator>And</q1:FilterOperator>
</q1:Criteria>
</Query>
</Request>
</Execute>
</soap:Body>
</soap:Envelope>
War es hilfreich?

Lösung 2

Ich habe das Problem nie herausgefunden. Aber meine Arbeit besteht darin, nur eine Verbindungszeichenfolge zur Laufzeit zu erstellen, die den Benutzernamen und das Passwort der Person enthält, die ich über die Callerid-Eigenschaft ausgeben möchte. Ich möchte also wirklich verkörpert werden und ich denke, für meine Situation spielt es wirklich keine Rolle.

Andere Tipps

Klingt so, als hätten Sie einen Fehler gefunden. Ich würde ein kostenloses Support-Ticket mit Microsoft @ 1-877-276-2464 eröffnen. Sie wären mit der Lösung schneller als das, was Sie hier finden, und das Ergebnis wäre schlüssig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top