2017-10-12 164 views
0

尝试从昨天调试我的控制台应用程序,但没有成功。我的脚本继续投掷:Dynamics 365内部异常元数据包含无法解析的引用:

元数据包含无法解析的引用:'https://xxxxxxx/XRMServices/2011/Organization.svc?wsdl&sdkversion=8.2'。

xxxxxxx是我的CRM域名的持有人。

我使用动态365的前提版本1612(8.2.0.749)(DB 8.2.0.749)。 Dynamics 365是IFD。

要创建控制台应用程序,我已经,

1)使用最新的动力365 SDK版本8.2.1.1 Microsoft Dynamics 365 SDK

2)是啊,还安装此SDK到我的GAC。然后重启我的服务器。

3)请检查是否我的组织服务端点是正确的,我也贴我的OrganizationService端点地址https://xxxxxxx/XRMServices/2011/Organization.svc浏览器,其工作由返回服务。**

4)我米使用Visual Studio 2013。网络框架4.5.2

当使用Dynamics 365在线试用版时它的工作很好奇怪的事情。

这是我的示例代码:

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

     } 

异常抛出: Exception throw:

详情:

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: 

在此先感谢。

+0

你可以利用Microsoft.Xrm.Tooling.Connector https://msdn.microsoft.com/en-us/library/dn689019.aspx – Alex

+0

谢谢,好吧,我知道Microsoft.Xrm.Client.dll已弃用,但仍然可以使用。奇怪的是,当我在CRM服务器上运行我的控制台应用程序时,它使用与其工作正常相同的代码。但是,它在DB服务器内运行时返回相同的异常。我想我的数据库服务器的某个地方有问题。奇怪的。 – xChaax

回答

1

当客户端计算机无法发送HTTP请求时,会出现此问题。客户端计算机无法发送HTTP请求,因为连接已关闭或不可用。而今天,我意识到我的数据库服务器使用TLS1.2而不是SSL作为连接到CRM应用服务器的协议,所以当通过console app从DB到CRM建立连接时,我必须在ServicePointManager上明确设置TLS版本。在调用CRM组织服务之前,随时可以运行此代码。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 

希望这对未来的人有好处。

0

当我将应用程序升级到CRM365时,我不得不改变连接的方式。这是我正在使用

string crmConnectionString = [email protected]"Url=https://<domain>; 
    AuthType=Office365; 
    UserName=<username>; 
    Password=" + <password>; 
CrmServiceClient crmSvcClient = new CrmServiceClient(crmConnectionString); 
OrganizationServiceProxy proxy = crmSvcClient.OrganizationServiceProxy; 
proxy.EnableProxyTypes(); 
OrganizationServiceContext orgContext = new OrganizationServiceContext(proxy); 

这不是前提下,所以我不积极,它会工作。但连接字符串必须指定AuthType,并且您需要使用CrmServiceClient进行连接。

+0

谢谢史蒂夫,是的在线版本的工作。我在前提下尝试过,但无济于事。我怀疑我的数据库服务器中有什么问题导致CRM没有这样的控制台应用程序运行问题。 – xChaax

0

我们已经使用IServiceManagement for crm version 2011及更高版本。下面显示了F#中的一个示例 - 它几乎直接转换为C#。

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

谢谢,不要认为设置连接的方式会导致此问题。我担心我的数据库服务器有问题,因为在我的CRM服务器上使用相同的代码控制台应用程序,猜猜它的工作正常。 – xChaax

相关问题