2014-03-06 79 views
1

我们使用第三方MS Dynamics托管服务,并使用Dynamics API Web服务“CrmService”向他们发送数据。MS Dynamics返回创建记录的GUID,但缺少记录

当我们调用“Create”方法时,它看起来好像呼叫是成功的,因为Dynamics服务器将GUID返回给调用者。看下面的CrmService代码,它告诉我,这正是我应该得到的,如果没有错误。

但是,该记录本身在Dynamics中缺失。记录无处可查。所以问题是:

1)任何理论(除了外星人)关于什么可能发生在我得到的GUID记录?

2)考虑到我无法访问动态服务器本身,如何去调试这样的事情?

3)托管服务应该执行什么样的调试步骤来调试这个问题(你检查过?或者这个?)等等。

public System.Guid Create(BusinessEntity entity) { 
    object[] results = this.Invoke("Create", new object[] { 
     entity}); 
     return ((System.Guid)(results[0])); 
} 
+0

你正在创建什么类型的实体?除了外星人之外,最常见的问题是安全限制,无法“看到”记录。您不需要访问服务器本身,因为您可以像创建它们一样查询记录。您定位的是哪种版本的MS CRM? – Filburt

+0

感谢您修复Filburt的格式问题。该版本是CRM 4.0(4.0.7333.2155)。我应该提到我可以通过sql server management studio访问CRM数据库。我正在查看应该记录的表格。但事实并非如此。但我有一个GUID。 Dynamics中是否有API日志,我可以告诉托管人员看一看? – Zuzlx

+1

我必须承认,我不知道CRM 4.0及其SDK有足够的好处以提供许多有用的建议(但是很好地了解2011),但通常情况下最后的解决方法是要求您的托管服务打开CRM中的跟踪捕获在处理新创建的记录过程中可能发生的任何错误。 – Filburt

回答

0

我知道有两种可能的原因:

方案1

有趣的是你 “正在使用第三方MS动态托管”。这可能意味着您要与其他租户共享CRM服务器(CRM组织数据库)。在这些环境中,当插件没有被设计为线程安全时,可能会发生问题。

我已经看到插件,实际上会造成同时处理的请求的数据。这些错误的来源可以例如自动编号插件产品,由同一部署中的多个租户共享。自动编号插件通常是在创建记录时触发的。你的记录不是不可能在另一个数据库中结束。

方案2

你在你的系统中的工作流被触发(直接或间接)通过建立你的记录删除您的纪录。异步插件实际上也可能是一个嫌疑犯。

异步进程在原始事务范围之外运行,因此您的代码不一定必须知道它。

+0

谢谢。非常合理。只要我知道什么,我会尽快更新。 – Zuzlx

+0

我们开始工作了。主机提供商通过创建从我们的环境到他们的环境的隧道,从“互联网”模式切换到AD模式。我身边没有任何问题。因此,尽管他们没有解释为什么当记录失踪时我获得GUID,但我只能假设(没有任何硬性证据)Henk的情景是根本原因。再次感谢大家。 – Zuzlx