爲了減少代碼量,我們團隊使用StartProcess方法爲來自單個方法的所有調用調用WCF實現。這一切都很好,但由於來自泛型方法的實際調用使用System.Action來調用,它永遠不會返回值,並且因爲我正在進行的一個調用我想提出請求/答覆,所以我可以'噸得到那個回報價值。如果您使用泛型System.action()調用,如何從WCF調用返回值?
這裏是處理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()調用以獲得返回字符串嗎?
這太好了,我接受了你的建議,想出了一些中間的東西。我重構了StartProcess代碼,現在有另一種方法,StartProcessWithReturn實現您的建議,使用Func。很棒!謝謝您的幫助。 –
2013-03-27 19:16:03