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