直接调用 BizTalk 帮助程序类中的存储过程的潜在副作用是什么



BizTalk 帮助程序类中直接调用 SQL Server 存储过程的潜在副作用和风险是什么?

我一直在检查一些代码,并发现了类似...

private static void SaveInvoice(long id, string fileName)
{
    try
    {
        using (SqlConnection sqlConnection = new SqlConnection("... server ..."))
        {
            sqlConnection.Open();
            sqlCommand = new SqlCommand("usp_SaveDocument", sqlConnection);
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@Id", id);
            sqlCommand.Parameters.AddWithValue("@FileName", fileName);
            sqlCommand.ExecuteNonQuery();
        }
    }
    finally 
    { 
      sqlCommand.Dispose(); 
    }
}

就 BizTalk 开发而言,这似乎是一种"难闻的气味"。

但是在"帮助程序"代码中进行这种直接数据库调用是否有任何真正的风险/限制?

代码方面,实际上没有"风险",它只是调用SQL Server的.Net代码。

但是,我认为在 BizTalk 应用程序中这样做的形式很糟糕,因为它不是 BizTalk 方式。 那将是一个架构,映射,SQL适配器等。

风险在于,此类操作实质上隐藏在应用程序中,而不是 BizTalk 开发人员希望找到它的位置。

我的意见:

这在很大程度上取决于您要实现的目标。

  • BizTalk 在可靠消息传递方面非常好,这正是您在使用适配器时使用的内容。使用帮助程序类时,需要知道自己在做什么,因为它是一种不同的技术。例如,您经常在业务流程中调用帮助程序类。您需要以不同的方式思考,或者更好地考虑错误处理,逻辑对业务流程的影响等......

  • BizTalk 应用程序可以像您想象的那样通用,并且配置在很大程度上取决于绑定(发送端口/接收位置的集合等...从一个系统移动到另一个系统可以像更改发送端口 URI 一样简单。执行帮助程序类时,需要将不同的连接字符串存储在某处。这可以是BTSNTSvc64.exe.config或其他东西。阅读:通过添加另一个依赖项使您的解决方案更加复杂的东西。

因此,我认为在某些情况下,从业务流程调用帮助程序类是完全可以的。

在处理需要存储的内容时,可能就是这种情况,该存储只是消息本身的一个小数据集。例如,确保重复检测/保持自己的跟踪。例如,您需要从消息/实例中存储某些内容的任何情况,例如,您需要与之关联。

通过帮助程序类将整个消息保存到SQL表中 - 无论出于何种原因 - 对我来说似乎都不是很好。这应该由 BizTalk 适配器完成。

只要您管理好连接就不会有任何问题。即使对于 SqlCommand,也建议使用"语句,我们已经这样做了很长时间,到目前为止没有任何问题。

最新更新