在Web Service中返回DataTable

时间:2014-01-20 11:20:30

标签: c# web-services

我对网络服务还比较陌生,所以请保持温和。

我目前的问题是我正在尝试使用作业更新来更新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;
    }
}

基本上,这是一个很好的方法吗?

0 个答案:

没有答案