服务器“”上的 MSDTC 不可用。 sql 服务器 link 调用存储过程时服务器出错
MSDTC on server '' is unavailable. sql server link server error when call stored procedure
我有 3 个服务器,名称分别为 ServiceServer
、DatabaseServer
和 WarehouseServer
。
我在 ServiceServer
上有一个 WCF 服务调用 DatabaseServer
中的存储过程。
public async void UpdateStatus(NajaResult najaresult, string userid, string IsWorn, string FuelSystem, string ValidTest, string SymfaServiceStatus, string NajaServiceStatus)
{
string _FuelSystem = (string.IsNullOrEmpty(FuelSystem)) ? "2" : FuelSystem;
_ctx.Database.ExecuteSqlCommand("EXEC [dbo].[UpdateInquiryStatus] @userid='" + userid + "', @IsWorn='" + IsWorn + "',@FuelSystem='" + _FuelSystem + "',@ValidTest='" + ValidTest + "',@SymfaServiceStatus='" + SymfaServiceStatus + "',@NajaServiceStatus='" + NajaServiceStatus + "' ,"
+ "@Chassis='" + najaresult.Chassis + "',@CarColor=N'" + najaresult.CarColor + "',@MotorNum='" + najaresult.MotorNum + "' ,@Vin='" + najaresult.VinNo + "', @SystemType=N'" + najaresult.SystemType + "',@CarTipe=N'" + najaresult.CarTip + "',@FuelType='" + najaresult.FuelType + "',@Model='" + najaresult.CarModel + "'" + ",@CarType=N'" + najaresult.CarType + "'");
}
这是我的存储过程 UpdateInquiryStatus
,它位于 DatabaseServer
:
ALTER PROCEDURE [dbo].[UpdateInquiryStatus]
@userid nvarchar(max),
@IsWorn nvarchar(max),
@FuelSystem nvarchar(max),
@ValidTest nvarchar(max),
@SymfaServiceStatus nvarchar(max),
@NajaServiceStatus nvarchar(max),
@Vin nvarchar(max),
@SystemType nvarchar(max),
@CarTipe nvarchar(max),
@FuelType nvarchar(max),
@Model nvarchar(max),
@Chassis nvarchar(max),
@CarColor nvarchar(max),
@MotorNum nvarchar(max),
@CarType nvarchar(max)
AS
INSERT INTO [PRISYMFA22a1\MASSYMSQLSERVER].[DB].[dbo].AutomotiveTemps
(id, isworn, validtest, CarColor, CarTipe, CarType, Chassis,
FuelSystem, FuelType, Model, MotorNum, SubmitDatetime,
SystemType, UserId, VIN)
VALUES (NEWID(), @IsWorn, @ValidTest, @CarColor, @CarTipe, @CarType, @Chassis,
@FuelSystem, @FuelType, @Model, @MotorNum, GETDATE(),
@SystemType, @userid, @Vin)
请注意,我在 DatabaseServer
和 WarehouseServer
之间创建了一个 link 服务器。
如您所见,我的程序将一条记录插入 WarehouseServer
,但我收到此错误:
MSDTC on server 'DatabaseServer' is unavailable.
但是我的 msdtc 是 运行 并且所有防火墙都被禁用了。我也在组件服务中打开了所有入站和出站远程。但是返回了同样的错误
转到数据库服务器上的组件服务并向下导航到本地 DTC,右键单击和 select 属性。
在“安全”选项卡上,确保选中“网络 DTC 访问”和“允许远程客户端”。
选中事务管理器通信下的允许入站(可能还有出站),您可能需要根据您在 DatabaseServer 和 ServiceServer 上 运行 的 Windows 版本更改身份验证。
我有 3 个服务器,名称分别为 ServiceServer
、DatabaseServer
和 WarehouseServer
。
我在 ServiceServer
上有一个 WCF 服务调用 DatabaseServer
中的存储过程。
public async void UpdateStatus(NajaResult najaresult, string userid, string IsWorn, string FuelSystem, string ValidTest, string SymfaServiceStatus, string NajaServiceStatus)
{
string _FuelSystem = (string.IsNullOrEmpty(FuelSystem)) ? "2" : FuelSystem;
_ctx.Database.ExecuteSqlCommand("EXEC [dbo].[UpdateInquiryStatus] @userid='" + userid + "', @IsWorn='" + IsWorn + "',@FuelSystem='" + _FuelSystem + "',@ValidTest='" + ValidTest + "',@SymfaServiceStatus='" + SymfaServiceStatus + "',@NajaServiceStatus='" + NajaServiceStatus + "' ,"
+ "@Chassis='" + najaresult.Chassis + "',@CarColor=N'" + najaresult.CarColor + "',@MotorNum='" + najaresult.MotorNum + "' ,@Vin='" + najaresult.VinNo + "', @SystemType=N'" + najaresult.SystemType + "',@CarTipe=N'" + najaresult.CarTip + "',@FuelType='" + najaresult.FuelType + "',@Model='" + najaresult.CarModel + "'" + ",@CarType=N'" + najaresult.CarType + "'");
}
这是我的存储过程 UpdateInquiryStatus
,它位于 DatabaseServer
:
ALTER PROCEDURE [dbo].[UpdateInquiryStatus]
@userid nvarchar(max),
@IsWorn nvarchar(max),
@FuelSystem nvarchar(max),
@ValidTest nvarchar(max),
@SymfaServiceStatus nvarchar(max),
@NajaServiceStatus nvarchar(max),
@Vin nvarchar(max),
@SystemType nvarchar(max),
@CarTipe nvarchar(max),
@FuelType nvarchar(max),
@Model nvarchar(max),
@Chassis nvarchar(max),
@CarColor nvarchar(max),
@MotorNum nvarchar(max),
@CarType nvarchar(max)
AS
INSERT INTO [PRISYMFA22a1\MASSYMSQLSERVER].[DB].[dbo].AutomotiveTemps
(id, isworn, validtest, CarColor, CarTipe, CarType, Chassis,
FuelSystem, FuelType, Model, MotorNum, SubmitDatetime,
SystemType, UserId, VIN)
VALUES (NEWID(), @IsWorn, @ValidTest, @CarColor, @CarTipe, @CarType, @Chassis,
@FuelSystem, @FuelType, @Model, @MotorNum, GETDATE(),
@SystemType, @userid, @Vin)
请注意,我在 DatabaseServer
和 WarehouseServer
之间创建了一个 link 服务器。
如您所见,我的程序将一条记录插入 WarehouseServer
,但我收到此错误:
MSDTC on server 'DatabaseServer' is unavailable.
但是我的 msdtc 是 运行 并且所有防火墙都被禁用了。我也在组件服务中打开了所有入站和出站远程。但是返回了同样的错误
转到数据库服务器上的组件服务并向下导航到本地 DTC,右键单击和 select 属性。
在“安全”选项卡上,确保选中“网络 DTC 访问”和“允许远程客户端”。
选中事务管理器通信下的允许入站(可能还有出站),您可能需要根据您在 DatabaseServer 和 ServiceServer 上 运行 的 Windows 版本更改身份验证。