Dynamics 365 온라인 조직에 연결하는 데 다음 코드가 있습니다. orgService.Execute(new WhoAmIRequest());
에 널 참조 예외가 발생하고 오류 로그가 코드 아래에 있습니다. 나는 다른 콘솔 애플 리케이션을 가진 두 대의 컴퓨터에서 이것을 시도했다. 8.2 및 8.0 SDK DLL을 모두 시도했습니다. 8.x SDK DLL을 사용하여 CrmConnection
을 사용하여 이것을 다시 작성하면 모든 것이 잘 작동합니다. 나도 같은 자격 증명을 사용하여 조직에 찾아 볼 수 있습니다 (& 오타가없는 확인하기 위해 붙여 잘라.)CrmServiceClient는 항상 null을 반환합니다. 조직 서비스
연결 문자열 형식이 https://msdn.microsoft.com/en-us/library/mt608573.aspx의 예에서 가져온 것입니다
명명 된 계정 사무실을 사용하여 365
<add name="MyCRMServer" -connectionString="AuthType=Office365;[email protected]; Password=passcode;Url=https://contoso.crm.dynamics.com"/>
기본 코드.
var connectionString = @"Url=https://ORGNAME.crm.dynamics.com; [email protected]; Password=43JF##$j#@Ha; Authype=Office365;";
var client = new CrmServiceClient(connectionString);
var orgService = (IOrganizationService)client.OrganizationWebProxyClient ?? client.OrganizationServiceProxy;
orgService.Execute(new WhoAmIRequest());
오류 로그 출력 :
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : Discovery URI is = https://ORGNAME.crm.dynamics.com:443/XRMServices/2011/Discovery.svc
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Information: 8 : DiscoverOrganizations - Initializing Discovery Server Object with https://ORGNAME.crm.dynamics.com/XRMServices/2011/Discovery.svc
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Verbose: 16 : DiscoverOrganizations - attempting to connect to CRM server @ https://ORGNAME.crm.dynamics.com/XRMServices/2011/Discovery.svc
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Error: 2 : Source : System.ServiceModel
Method : Retrieve
Date : 2/13/2017
Time : 5:42:37 PM
Error : Metadata contains a reference that cannot be resolved: 'https://ORGNAME.crm.dynamics.com/_common/error/errorhandler.aspx?BackUri=&ErrorCode=&Parm0=%0d%0a%0d%0aتفاصيل الخطأ: The service '%2fXRMServices%2f2011%2fDiscovery.svc' cannot be activated due to an exception during compilation. The exception message is: Could not load file or assembly 'Microsoft.Crm.Site.Services%2c Version%3d8.0.0.0%2c Culture%3dneutral%2c PublicKeyToken%3d31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified..&RequestUri=%2fXRMServices%2f2011%2fDiscovery.svc%3fwsdl%26sdkversion%3d8.1&user_lcid=1025'.
Stack Trace : 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.ServiceConfigurationFactory.CreateManagement[TService](Uri serviceUri, Boolean enableProxyTypes, Assembly assembly)
at Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory.CreateManagement[TService](Uri serviceUri)
at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.CreateAndAuthenticateProxy[T](IServiceManagement`1 servicecfg, Uri ServiceUri, Uri homeRealm, ClientCredentials userCredentials, ClientCredentials deviceCredentials, String LogString)
at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.DiscoverOrganizations(Uri discoveryServiceUri, Uri homeRealmUri, ClientCredentials clientCredentials, ClientCredentials deviceCredentials)
at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.DiscoverOrganizations(Uri discoveryServiceUri, Uri homeRealmUri, NetworkCredential networkCredential)
at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.InitCRM2011Service()
======================================================================================================================
Inner Exception Level 1 :
Source : System.Runtime.Serialization
Method : ThrowXmlException
Date : 2/13/2017
Time : 5:42:37 PM
Error : CData elements not valid at top level of an XML document. Line 1, position 3.
Stack Trace : at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, XmlException exception)
at System.Xml.XmlUTF8TextReader.Read()
at System.ServiceModel.Description.MetadataExchangeClient.MetadataLocationRetriever.GetXmlReader(HttpWebResponse response, Int64 maxMessageSize, XmlDictionaryReaderQuotas readerQuotas)
at System.ServiceModel.Description.MetadataExchangeClient.MetadataLocationRetriever.DownloadMetadata(TimeoutHelper timeoutHelper)
at System.ServiceModel.Description.MetadataExchangeClient.MetadataRetriever.Retrieve(TimeoutHelper timeoutHelper)
======================================================================================================================
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Error: 2 : Unable to Login to Dynamics CRM
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Error: 2 : OrganizationWebProxyClient is null
Microsoft.Xrm.Tooling.Connector.CrmServiceClient Error: 2 : OrganizationServiceProxy is null
그 방법은 확실히 작동합니다, 그것을 게시 주셔서 감사합니다. SDK에 문서화되어있는 연결 문자열 메서드가 작동하지 않는 이유는 여전히 해결되지 않습니다. 내가 잘못했는지 또는 버그인지 알아 내려고 노력 중입니다. 문제는 내 실제 응용 프로그램에서 구성 파일에서 연결 문자열을 얻는 것을 선호합니다. 즉, 연결 유형을 알아 내야하고 올바른 매개 변수를 전달하지 않아도됩니다. – Nicknow
나는 그것을 이해했다. 나는'connectionString'에 타입을 가지고 있습니다. 그것은 __authtype__이어야하고 나는 __authype__을 가지고 있어야합니다. 귀하의 대답은 실제로 저를 거기에 데려다주었습니다. 인증 유형을 명시 적 매개 변수로 선언하면이 문제를 해결하는 데 도움이됩니다. – Nicknow
근본 원인을 찾아 냈기 때문에 다행 스럽네요. :) btw는 오타가 처음으로 눈치 채기 어려웠습니다. –