OrganizationServiceProxy
에 로그인하려면 별도의 사용자 계정을 사용해야합니다. 인증을 위해 프록시에 전달할 Windows 자격 증명을 검색 할 수 없습니다.
사용하는 사용자는 prvActOnBehalfOfAnotherUser
권한이 필요합니다.
성공적으로 로그인하고 유효한 OrganizationServiceProxy를 검색 할 수있게되면 서비스 소비자로해야 할 일은 CallerId에서 작업을 호출 할 때마다 CallerId를 지정하는 것입니다. 이 토큰은 Xrm.Page.context.getUserId
을 사용하여 xrm 모델에서 검색해야합니다. 만나다. http://msdn.microsoft.com/en-us/library/gg334511.aspx.
실버 라이트에서브릿지를 사용하여 클라이언트 사이드 자바 스크립트를 실행하여 crm에 로그인 한 현재 사용자의 사용자 ID를 검색합니다. 응용 프로그램 부트 스트랩시이 작업을 수행하고 applicationdata 변수에 값을 저장하여 실버 라이트 앱에서 전역 적으로 액세스 할 수 있도록하는 것이 좋습니다.
예 : 클라이언트 측 스크립트의
function CrmContext() {
}
var context = null;
with (window.parent) {
context = Xrm.Page.context;}
CrmContext.prototype.ReadUserId = function() {
var userId = context.getUserId();
return userId;
}
이 값
예와 프록시 발신 번호 표시 설정 한 사용자 토큰을 일단.
private OrganizationServiceProxy Proxy { get; set; }
public Guid Create(CreateEntity request)
{
if (request == null || request.UserId == Guid.Empty || request.Entity == null)
{
throw new InvalidMessageException("Invalid reqest message. Please provide compulsory criteria");
}
var result = Guid.Empty;
try
{
if (Proxy != null)
{
Proxy.CallerId = request.UserId;
using (Proxy)
{
result = Proxy.Create(request.Entity);
}
}
}
catch (FaultException<OrganizationServiceFault> e)
{
Log.Error(e.Message);
throw new IntegrationException(e.Message);
}
return result;
}
이를 해결하기 위해 취해진 방식 필자
는 CRM 어댑터 CRM은 프록시를 캡슐화하고 사용자 토큰을 포함하는 서비스 인터페이스로 요청을 보내는 개체를 생성 하였다.
public OrganizationServiceAdapter(ICrmConfigurationContext crmConfigurationConext)
{
try
{
Proxy = new OrganizationServiceProxy(
crmConfigurationConext.OrganizationServiceConfiguration,
crmConfigurationConext.Credentials);
}
catch (Exception e)
{
//// TODO: Add local proxy pattern implementation for failover
Proxy = null;
Log.Error(e.Message);
throw new IntegrationException(ExceptionMessages.CouldNotLoginToOrganizationService());
}
}