我正在运行此代码(名称和安全细节被遮挡)。当我这样做时,我获得401未经授权。凭据是托管服务器上的用户的凭据。这是否可以对抗IFD系统?
var token = new CrmAuthenticationToken(); token.AuthenticationType = 0; token.OrganizationName =“myorganisation”;
CrmService service = new CrmService();
service.Url = "https://myorganisation.dynamicsgateway.com/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.Credentials = new NetworkCredential("bob.smith", "Password", "HOSTEDCRM");
var request = new RetrieveMultipleRequest();
request.Query = new QueryExpression
{
ColumnSet = new ColumnSet(new string[] { "name" }),
EntityName = "account"
};
var response = service.Execute(request);
答案 0 :(得分:2)
我认为此代码不属于CRM网站?在这种情况下,您将需要添加对发现服务的引用,如美居指出的那样。您将需要针对发现服务执行RetrieveCrmTicketRequest以获得适合连接到Crm服务的票证。
在您的CRM身份验证令牌中,您需要将身份验证类型设置为2(IFD)。然后将令牌上的CrmTicket属性设置为您从RetrieveCrmTicketResponse获得的票证。
我还根据该响应设置了URL,但您可以继续对其进行硬编码。
您需要继续在服务上设置凭据。
我使用单个用户连接到CRM并缓存该故障单(过期日期在发现服务的响应中)。这样我就可以在将来的请求中绕过发现服务。有一个错误代码可以寻找再次购买机票,但我手头没有。
答案 1 :(得分:1)
是的,有可能,你只缺少一些小块,CrmAuthenticationToken.ExtractCrmAuthenticationToken。
在动态论坛http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/81f8ba82-981d-40dd-893d-3add67436478
上查看这个伟大的解释