2017-10-12 3 views
0

Versuchen Sie, meine Konsolenanwendung von gestern zu debuggen, aber keinen Erfolg. Mein Skript weiter werfen:Dynamics 365 on premise-Ausnahme Metadaten enthalten eine Referenz, die nicht aufgelöst werden kann:

Metadaten enthält eine Referenz, die nicht aufgelöst werden kann: 'https://xxxxxxx/XRMServices/2011/Organization.svc?wsdl&sdkversion=8.2'.

xxxxxxx ist Platzhalter für meine CRM-Domäne.

Ich verwende Dynamics 365 on premise Version 1612 (8.2.0.749) (DB 8.2.0.749). Die Dynamics 365 war IFD.

Konsolenanwendung zu erstellen, I, bereits

1) neueste Dynamik Mit 365 Sdk Version 8.2.1.1 Microsoft Dynamics 365 SDK

2) Ja, auch diese sdk in mein GAC installieren. Dann starte meinen Server neu.

3) Um zu überprüfen, ob mein Organisation Service-Endpunkt richtig ist, ich meine OrganizationService Endpunkt auch Adresse https://xxxxxxx/XRMServices/2011/Organization.svc in Browser einfügen und seine Arbeit durch den Dienst zurück. **

4) I von Visual Studio 2013 verwenden. net Framework 4.5.2

seltsame Dinge bei der Verwendung von Dynamics 365 Online-Test funktioniert es gut.

Das ist mein Beispielcode:

static void Main(string[] args) 
     { 

      IOrganizationService organizationservice; 
      // Get the CRM connection string and connect to the CRM Organization 

      ClientCredentials Credentials = new ClientCredentials(); 
      Credentials.UserName.UserName = "username"; 
      Credentials.UserName.Password = "password"; 

      Credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; 

      organizationservice = new OrganizationServiceProxy(
       new Uri("https://xxxxxxx/XRMServices/2011/Organization.svc"), null, Credentials, null); 

     } 

Ausnahme werfen: Exception throw:

Details:

System.InvalidOperationException was unhandled 
HResult=-2146233079 
Message=Metadata contains a reference that cannot be resolved: 
'https://xxxxxxx/XRMServices/2011/Organization.svc?wsdl&sdkversion=8.2'. 
Source=System.ServiceModel 
StackTrace: 
    at System.ServiceModel.Description.MetadataExchangeClient.MetadataRetriever.Retrieve(TimeoutHelper timeoutHelper) 
    at System.ServiceModel.Description.MetadataExchangeClient.ResolveNext(ResolveCallState resolveCallState) 
    at System.ServiceModel.Description.MetadataExchangeClient.GetMetadata(MetadataRetriever retriever) 
    at System.ServiceModel.Description.MetadataExchangeClient.GetMetadata(Uri address, MetadataExchangeClientMode mode) 
    at Microsoft.Xrm.Sdk.Client.ServiceMetadataUtility.RetrieveServiceEndpointMetadata(Type contractType, Uri serviceUri, Boolean checkForSecondary) 
    at Microsoft.Xrm.Sdk.Client.ServiceConfiguration`1..ctor(Uri serviceUri, Boolean checkForSecondary) 
    at Microsoft.Xrm.Sdk.Client.OrganizationServiceConfiguration..ctor(Uri serviceUri, Boolean enableProxyTypes, Assembly assembly) 
    at Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory.CreateConfiguration[TService](Uri serviceUri, Boolean enableProxyTypes, Assembly assembly) 
    at Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory.CreateConfiguration[TService](Uri serviceUri) 
    at Microsoft.Xrm.Sdk.Client.ServiceProxy`1..ctor(Uri uri, Uri homeRealmUri, ClientCredentials clientCredentials, ClientCredentials deviceCredentials) 
    at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy..ctor(Uri uri, Uri homeRealmUri, ClientCredentials clientCredentials, ClientCredentials deviceCredentials) 
    at ConsoleConnectToCRM.Program.Main(String[] args) in d:\CRM2015\SSIS\TestCRMConnection\TestCRMConnection\Program.cs:line 45 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.Net.WebException 
    HResult=-2146233079 
    Message=The underlying connection was closed: An unexpected error occurred on a receive. 
    Source=System 
    StackTrace: 
     at System.Net.HttpWebRequest.GetResponse() 
     at System.ServiceModel.Description.MetadataExchangeClient.MetadataLocationRetriever.DownloadMetadata(TimeoutHelper timeoutHelper) 
     at System.ServiceModel.Description.MetadataExchangeClient.MetadataRetriever.Retrieve(TimeoutHelper timeoutHelper) 
    InnerException: System.ComponentModel.Win32Exception 
     HResult=-2147467259 
     Message=The client and server cannot communicate, because they do not possess a common algorithm 
     Source=System 
     ErrorCode=-2147467259 
     NativeErrorCode=-2146893007 
     StackTrace: 
      at System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface SecModule, String package, CredentialUse intent, SecureCredential scc) 
      at System.Net.Security.SecureChannel.AcquireCredentialsHandle(CredentialUse credUsage, SecureCredential& secureCredential) 
      at System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint) 
      at System.Net.Security.SecureChannel.GenerateToken(Byte[] input, Int32 offset, Int32 count, Byte[]& output) 
      at System.Net.Security.SecureChannel.NextMessage(Byte[] incoming, Int32 offset, Int32 count) 
      at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
      at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) 
      at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 
      at System.Net.TlsStream.CallProcessAuthentication(Object state) 
      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
      at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) 
      at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
      at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
      at System.Net.ConnectStream.WriteHeaders(Boolean async) 
     InnerException: 

Vielen Dank im Voraus.

+0

können Sie nutzen Microsoft.Xrm.Tooling.Connector https://msdn.microsoft.com/en-us/library/dn689019.aspx – Alex

+0

Danke, Ok, ich bin mir bewusst, dass Microsoft.Xrm.Client.dll veraltet , kann aber immer noch verwendet werden. Sonderbare Sache ist, wenn ich meine Konsole App in CRM-Server mit dem gleichen Code wie oben funktioniert es funktioniert. Es gibt jedoch dieselbe Ausnahme, wenn es im DB-Server ausgeführt wird. Ich denke, dass irgendwo in meinem DB-Server falsch ist. SELTSAM. – xChaax

Antwort

1

Dieses Problem tritt auf, wenn der Clientcomputer eine HTTP-Anforderung nicht senden kann. Der Clientcomputer kann die HTTP-Anforderung nicht senden, da die Verbindung geschlossen wurde oder nicht verfügbar ist. Und heute merke ich, dass mein DB-Server TLS1.2 nicht SSL als Protokoll für die Verbindung mit CRM App Server verwendet, also wenn ich eine Verbindung von DB zu CRM über console app, muss ich explizit die TLS-Version auf dem ServicePointManager festlegen. Lassen Sie diesen Code einfach laufen, bevor Sie den CRM-Organisationsdienst aufrufen.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 

Hoffe, dass dies in Zukunft jemand profitieren wird.

0

Wenn ich eine Anwendung auf CRM365 aktualisiert habe, musste ich die Art ändern, wie eine Verbindung hergestellt wurde. Dies ist, was ich benutze

Dies ist nicht vor Ort, also bin ich nicht positiv, es wird funktionieren. Die Verbindungszeichenfolge muss jedoch den AuthType angeben und Sie müssen den CrmServiceClient für die Verbindung verwenden.

+0

Danke Steve, yeah für Online-Version funktioniert. Ich habe es mit der Prämisse versucht, aber ohne Erfolg. Ich vermutete, dass etwas in meinem DB-Server nicht stimmt, weil es in CRM kein Problem für die Konsolen-App gab. – xChaax

0

Wir haben IServiceManagement für crm Version 2011 und höher verwendet. Ein Beispiel in F # ist unten gezeigt - was fast direkt in C# übersetzt.

let authenticate uri username password domain = 
    let m = ServiceConfigurationFactory.CreateManagement<IOrganizationService(uri) 
    let cred = AuthenticationCredentials() 
    cred.ClientCredentials.Windows.ClientCredential <- 
    new NetworkCredential(username, password, domain) 
    let ac = m.Authenticate(cred) 
    let proxy = new OrganizationServiceProxy(m, ac.ClientCredentials) 
    proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); 
    proxy 
+0

Danke, denke nicht, die Art der Einrichtung einer Verbindung verursacht hier das Problem. Ich mache mir Sorgen, dass auf meinem DB-Server etwas nicht stimmt, da der gleiche Code für die Console-App auf meinem CRM-Server verwendet wird. – xChaax

Verwandte Themen