我对网络服务还比较陌生,所以请保持温和。
我目前的问题是我正在尝试使用作业更新来更新2个系统(让我们称之为系统A和系统B)。在这个过程中,我需要记录更新的结果(成功或失败)。这些结果需要放入数据库表(MyUpdateLog)。
要使更新系统A的更新有一个3阶段的过程来使其成功更新,使其变得有点棘手。只有第1阶段才能访问Web服务。在这个阶段,我需要返回第一阶段更新的成功或失败。将数据表传递给Web服务,并进行所有更新。然后,通过Web服务单独尝试每个更新。最初我以为我只是调用一个存储过程来在MyUpdateLog中记录结果,但最终可能会出现重复。
在捕获结果方面,我认为一种简单的方法是在Web服务中创建数据表(MyResults),在方法调用中使用try / catch来处理更新,并通过简单的成功更新MyResults或每次更新工作失败的结果。
注意:我不是要尝试从数据库返回实际数据,而只是尝试更新数据库的结果。
Web服务已经存在并且有这样的界面(我已经添加了我的DataTable和操作合同):
[ServiceContract]
public interface IMyService
{
[OperationContract]
DataTable MyResults(DataTable updates);
}
使用界面的类如下(使用我的新方法):
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConCurrencyMode = ConCurrencyMode.Single)]
public class MyService : IMyService
{
public DataTable MyResults(DataTable updates)
{
DataTable dtresults = new DataTable("My Results");
dtresults.Columns.Add("Update ID", typeof(string));
dtresults.Columns.Add("Result", typeof(string));
string result = "";
foreach(DataRow row in updates.Rows)
{
try
{
ProcessUpdate(row["Update"].ToString());
result = "Success";
}
catch(Exception ex)
{
result = "Failed: " + ex.Message;
}
DataRow rwResults = dtresults.NewRow();
rwResults["Update ID"] = row["ID"].ToString();
rwResults["Result"] = result;
dtresults.Rows.Add(rwResults);
}
return dtresults;
}
}
基本上,这是一个很好的方法吗?