C# WCF-当方法无效时如何返回值

C# WCF-当方法无效时如何返回值,c#,wcf,C#,Wcf,案例:我有一个void方法,它插入数据并做很多事情,但最近我接到一个要求,即服务中的这个公开方法需要返回一个值 我有什么选择? 我很确定我需要重构这个,但是如何重构或者哪种方法重构 [OperationContract] [WebInvoke] [TransactionFlow(TransactionFlowOption.Allowed)] void InsertPerson(string Name, string LastName, string Income,

案例:我有一个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
,并创建了一个类,该类返回整个结构,如下所示

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;
List PersonInfo=new List();
DataSet ds=StoredProcedures.PersonSelect(名称、姓氏);
如果(ds.Tables[0].Rows.Count>0)
{
Person PersonData=新的Person();
PersonData.SuitableForLoan=ds.Tables[0]。行[0][“SuitableForLoan”]。ToString();
PersonInfo.Add(PersonData);
}
返回PersonInfo;

编辑2:我不明白为什么我的问题被否决了,我非常讨厌这个地方,现在我记得为什么我不想再做一个帐户了。好吧,这里的简单答案是:更改API-可能返回一个枚举而不是
void
,以指示成功或失败的原因。但是,请注意,这是一个突破性的更改,因此除非您愿意同时部署客户端和服务器以匹配此API,否则您无法做到这一点。如果不能破坏API,则必须添加一个带有返回值的新方法,并迁移客户机以使用新方法-将旧方法留给旧客户机使用,直到更新为止


你也可以用某种类型的头来破解它,但在大多数情况下,这是一个糟糕的主意,只会让事情变得比现在更混乱。

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


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

你有什么特别的原因想使用
void
而不是说
bool
?因为
bool
只返回我需要同时发送和返回的东西,“找到解决方案”将使用edit更新问题“找到解决方案”是否有特别的原因要使用
void
而不是说
bool
?因为
bool
只返回我需要同时发送和返回的内容,“找到解决方案”将使用edit更新问题