2010-07-29 40 views
0

我正在运行此代码(名称和安全详细信息被遮盖)。当我这样做时,我获得401未经授权。凭据是托管服务器上用户的凭证。这是否有可能违反IFD系统?我可以在托管的IFD系统上使用Dynamics CRM 4.0 SDK吗?

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

回答

1

是的,这是可能的,你只是缺少一点点件,CrmAuthenticationToken.ExtractCrmAuthenticationToken。

检查出动态论坛http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/81f8ba82-981d-40dd-893d-3add67436478

+0

这看起来不错,但我如何获得迪斯科服务的链接? Visual Studio可以看到XML,但不会添加说明转发信息不可用的链接。 – 2010-07-29 13:49:21

+0

迪斯科服务始终位于当前URL下的/MSCRMServices/2007/SPLA/CrmDiscoveryService.asmx。您不希望为其添加引用,因为ISV目录下的所有页面都是独立运行的,它们在CRM应用程序池下运行,因此您无法添加对服务的引用。 – BeardinaSuit 2010-07-29 14:10:24

+0

顺便说一句,为防止您为ASPx页面创建应用程序,您不能将其用于IFD,您必须将ASPx页面放置在ISV文件夹下,以便它们可以由CRM应用程序编译并集成在相同的上下文中... – BeardinaSuit 2010-07-29 14:14:01

2

这个伟大的解释我认为这个代码是CRM网站之外?在这种情况下,您会想按照上面的Mercure指出的那样添加对发现服务的引用。您需要对发现服务执行RetrieveCrmTicketRequest以获取适用于连接到Crm服务的票据。

在您的CRM认证令牌中,您需要将认证类型设置为2(IFD)。然后将令牌上的CrmTicket属性设置为您从RetrieveCrmTicketResponse获得的票证。

我还根据该响应设置了URL,但您可以继续对其进行硬编码。

您将希望继续在服务上设置凭证。

我使用单个用户连接到CRM并缓存该故障单(过期日期位于发现服务的响应中)。这样我可以绕过未来请求的发现服务。有一个错误代码可以再次查找票据,但我没有它。