在CRM SDK上验证消息的安全性时发生错误

Hen*_*dra 4 c# dynamics-crm-2011 dynamics-crm-2013

从CRM SDK代码连接CRM 2013时出错.错误消息是

从另一方收到了无担保或不正确安全的故障.请参阅内部FaultException以获取故障代码和详细信息.

这是内部异常消息:

验证邮件的安全性时发生错误.

CRM安装在Virtual Box上,包括:

  • Windows Server 2012
  • CRM 2013
  • SQL Server 2012
  • 主机和客户机之间的时区和日期时间已经相同

我已经通过以下方案测试了CRM连接

  • 能够从主机浏览器访问CRM(Windows 7)
  • 能够从来宾计算机运行以下代码(CRM SDK)(Win Server 2012)
  • 无法从主机运行以下代码(Windows 7)

这是我的源代码:

        var uri = new Uri(@"http://XXXX/MRC/XRMServices/2011/Organization.svc");
        var username = @"XX\Administrator";
        var password = "password";

        _credential.UserName.UserName = username;
        _credential.UserName.Password = password;

        using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(uri, null, _credential, null))
        {
            serviceProxy.EnableProxyTypes();
            IOrganizationService service = (IOrganizationService)serviceProxy;
            MRServiceContext context = new MRServiceContext(service);
            var query = context.ContactSet.ToList();
            foreach (var item in query)
            {
                Console.WriteLine(item.FirstName);
            }
        }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Hen*_*dra 12

反对这是我犯过的一个愚蠢的错误.此问题是由客户机日期过去与主机进行比较引起的.我只检查了客人和主机上已经相同的时间.但是,我忘了检查日期.

这是线索:

System.ServiceModel.Security.MessageSecurityException, System.ServiceModel,             
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>The security timestamp is stale because its expiration time 
('2014-04-03T06:49:23.526Z') is in the past. Current time is '2014-04-04T06:44:14.447Z' 
and allowed clock skew is '00:05:00'.</Message><StackTrace>   at 
System.ServiceModel.Security.SecurityTimestamp.ValidateFreshness(TimeSpan timeToLive, 
TimeSpan allowedClockSkew)
Run Code Online (Sandbox Code Playgroud)

这是检查CRM上发生的一些错误的最佳方法(不会出现在客户端):

  1. 在Microsoft Dynamics CRM中启用跟踪以获取发生的实际问题
  2. 读取C:\ Program Files\Microsoft Dynamics CRM\Trace上通常可用的日志/堆栈跟踪文件

希望这些步骤对其他人有用.