为了减少代码量,我们的团队在 StartProcess 方法中放置了一个方法,以便为来自单个方法的所有调用调用 WCF 实现。这一切都很好,但由于来自通用方法的实际调用使用 System.Action 来调用,它永远不能返回值,并且由于我正在进行的调用之一我想发出请求/回复,我可以' t 得到那个返回值。
这是处理 WCF 请求的通用方法:
public static ProcessResultDC StartProcess<T>(T setupData, string processName, Action<T> action, string exteriorAccountNumber, string companyCode) where T : IAmValidatable, IHaveAProcessGuid {
var result = new ProcessResultDC { Status = ProcessStatusEnum.Accepted };
// Do some authentication stuff here
try {
action(setupData); // <-- This returns void, but I would like to return a string to the client
} catch (Exception exc) {
result.Status = ProcessStatusEnum.Error;
result.Messages.Add(exc.Message);
}
return result;
}
这是客户电话:
var createOnDemandDataDc = new CreateOnDemandDataDc { RawData = punchRawData };
var result = TimeForceProcessHelper.StartProcess(createOnDemandDataDc, "Create On Demand Data", x => new CreateOnDemandDataProxy().CreateOnDemandData(createOnDemandDataDc), "NA", companyCode);
即使我的 createOnDemandDataDc 实现返回一个字符串,结果变量也无法知道来自操作调用的字符串。
有一个更好的方法吗?或者我可以简单地执行 Action() 调用以外的操作来获取返回字符串?