Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回Web服务中的DataTable_C#_Web Services - Fatal编程技术网

C# 返回Web服务中的DataTable

C# 返回Web服务中的DataTable,c#,web-services,C#,Web Services,我对网络服务相当陌生,所以请温柔一点 我当前的问题是,我试图用作业更新更新两个系统(让我们称它们为系统A和系统B)。在这个过程中,我需要记录更新的结果(成功或失败)。这些结果需要放入数据库表(MyUpdateLog)中 为了让它更复杂一些,需要更新系统a的更新有一个三阶段的过程,使其成为一个成功的更新。只有阶段1才能访问web服务。在这个阶段,我需要返回第一阶段更新的成功或失败。一个datatable被传递给web服务,其中包含所有要进行的更新。然后通过web服务分别尝试每个更新。起初,我认为我

我对网络服务相当陌生,所以请温柔一点

我当前的问题是,我试图用作业更新更新两个系统(让我们称它们为系统A和系统B)。在这个过程中,我需要记录更新的结果(成功或失败)。这些结果需要放入数据库表(MyUpdateLog)中

为了让它更复杂一些,需要更新系统a的更新有一个三阶段的过程,使其成为一个成功的更新。只有阶段1才能访问web服务。在这个阶段,我需要返回第一阶段更新的成功或失败。一个datatable被传递给web服务,其中包含所有要进行的更新。然后通过web服务分别尝试每个更新。起初,我认为我只需调用一个存储过程来在MyUpdateLog中记录结果,但最终可能会出现重复

就捕获结果而言,我认为一个简单的方法是在web服务中创建一个datatable(MyResults),对处理更新的方法调用进行try/catch,并使用每个作业更新的简单成功或失败结果更新MyResults

注意:我不是试图从数据库返回实际数据,而是试图更新数据库的结果

web服务已经存在,并且具有如下接口(我已使用操作契约添加了我的DataTable):

使用接口的类如下(使用我的新方法):


因此,基本上,这是一种好的方法吗?

这是一个大约十年前被抛弃的坏主意。对于初学者来说,序列化文档将无法被非.NET客户端读取,模式将是可怕的。Web服务使用模式,您试图返回基本上没有模式的对象。如果您想返回无模式的数据,那么使用RESTAPI会容易得多。谢谢您提供的信息。只是DataTable在web服务中不可用吗?我以为这是加进去的。数据集呢?只需在.NET客户端上进行更新即可。
[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;
    }
}