WCF - 如何在方法无效时返回值

时间:2018-05-04 22:40:46

标签: c# wcf

案例:我有一个插入数据并执行大量操作的void方法但是最近我被要求服务中的这个公开方法需要返回一个值

我有哪些选择? 我很确定我需要重构这个但是如何或哪种方法?

    [OperationContract]
    [WebInvoke]
    [TransactionFlow(TransactionFlowOption.Allowed)]
    void InsertPerson(string Name, string LastName, string Income, string Address)

方法如下:

    public void InsertPerson(string Name, string LastName, string Income, string Address)
    {
       try
       {
          Name = (Name == null) ? "" : Name ;
          LastName = (LastName  == null) ? "" : LastName ;
          Income = (Income== null) ? "" : Income;
          Address = (Address== null) ? "" : Address;

          //bunch of Procedures, DataSets and Functions
       }
       catch(Exception ex)
       {
         StoredProcedures.InsertLog(ex.ToString());
       }
    }

需要解决方案:让我们说程序计算收入并确定该人不适合贷款,我需要通过同样的方法告诉来电者该人不适合贷款比如说一些名为HighRisk的额外参数返回1或0

修改 找到一个解决方案非常简单我只是将void更改为List<T>并创建了一个返回整个结构的类

List<Person> PersonInfo = new List<Person>();
DataSet ds = StoredProcedures.PersonSelect(Name, LastName);
if (ds.Tables[0].Rows.Count > 0)
{
   Person PersonData = new Person();
   PersonData.SuitableForLoan = ds.Tables[0].Rows[0]["SuitableForLoan"].ToString();
   PersonInfo.Add(PersonData);
}
return PersonInfo;

编辑2:我不明白为什么我的问题被低估了,我非常讨厌这个地方,现在我记得为什么我不想再建一个帐户

1 个答案:

答案 0 :(得分:4)

嗯,这里简单的答案是:更改API - 可能返回枚举而不是void,以指示成功或失败的原因。请注意,这是一个重大变化,因此您不能这样做,除非您乐意同时部署客户端和服务器 以匹配此API。如果您无法破坏API,则必须添加具有返回值的新方法,并迁移客户端以使用新方法 - 将旧方法留给旧方法使用,直到更新为止。

你也可以用某种标题来破解它,但在大多数情况下这是一个糟糕的想法,只会让事情变得比现在更加困惑。