我的本地计算机上有一个CRM软件。在该软件的SQL DB中,我添加了一个链接服务器(我们的测试网站与我们的测试数据库:Windows Small Business Server 2011)。 链接服务器设置为
RPC => True
RPC Out => True
Enable Promotion of Distributed Transaction => True
我创建了一个触发器,以便在通过CRM软件更新公司时,它会启动一个存储过程,例如:
proc [dbo].[Proc_UpdateInstitutionWeb]
@Company_ID nvarchar(50)
as
DECLARE @id int = 0;
BEGIN TRY
SET @id = CONVERT(int, @Company_ID)
END TRY
BEGIN CATCH
...
END CATCH
update [myserver].[mydatabase].[dbo].[company]
set founded = 2000
where company.id= @id
当我在CRM中进行更改时,这不起作用。所以我在CRM SQL DB中的公司表上尝试了一个简单的更新查询,但它引发了以下错误:
OLE DB provider "SQLNCLI10" for linked server "myserver" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Procedure Proc_UpdateInstitutionWeb, Line 34
The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "myserver" was unable to begin a distributed transaction.
这是我尝试做的事情:
在我的计算机和测试服务器上:
这些都没有解决问题。我该怎么办?
谢谢
答案 0 :(得分:2)
经过多天失去我的头发,这对我有用,万一有人需要它。
首先我禁用了自动生成6to4地址。
1. Open Command
2. Type the command `netsh interface 6to4 set state disabled`
然后我限制了两台机器上的DCOM端口范围
1. Start -> Run -> Type DCOMCNFG
2. Go to the properties of the My Computer node under the Computers folder underneath Component Services.
3. Under the My Computer Properties look under the Default Protocols tab.
4. Over there make sure that Connection-oriented TCP/IP is selected and then click on Properties.
5. No range was listed. I added one. Example 5000-5100
我认为Component services
和Services
中有关DTC的所有先前工作也需要这样做。
我最终得到了使用DTCPing.exe和以下参考资料的解决方案: