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

时间:2014-04-03 04:03:19

标签: c# dynamics-crm-2011 dynamics-crm-2013

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

  

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

这是内部异常消息:

  

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

CRM安装在Virtual Box上,包括:

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

我已使用以下方案测试CRM连接

  • 能够从主机浏览器(Windows 7)访问CRM
  • 能够从来宾计算机(Win Server 2012)运行以下代码(CRM SDK)
  • 无法从主机(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);
            }
        }

提前致谢。

1 个答案:

答案 0 :(得分:11)

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

以下是线索:

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)

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

  1. Enable tracing in Microsoft Dynamics CRM以解决发生的真正问题
  2. 读取C:\ Program Files \ Microsoft Dynamics CRM \ Trace
  3. 上通常可用的日志/堆栈跟踪文件

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