我的一位业务经理有以下方法:
public ImportItemsResult Import(String fullPath)
{
OleDbDataManager oleDbDataManager = new OleDbDataManager();
List<ItemInfo> importedData = oleDbDataManager.GetData<ItemInfo>(fullPath, ItemInfoMapper).ToList();
ImportItemsResult result = ValidateImportedData(importedData);
if (result.Status == OperationStatus.Success)
{
//do something with importedData in the background and return
//the result to the user right away
}
return result;
}
该代码允许用户上传.csv文件,然后对其进行解析和验证。在验证之后,如果所有数据都是okey,则处理数据并将其保存到数据库,否则文件将被拒绝,并在UI上向用户显示详细的错误消息。
问题:
我之所以这么想是因为我需要通过WCF Web服务公开这个功能,我不知道它会处理可能导致Web服务的数据的时间有多长如果花了太长时间就超时了。有什么建议吗?
答案 0 :(得分:0)
验证后仍然可能出现问题 - 您的WCF服务可能崩溃或者它所处的机器失去电源 - 您将丢失所有数据。
您需要在返回结果之前将CSV数据保存到非易失性介质 之前。此外,我将长时间运行的代码放入一个单独的Windows服务(假设您的WCF服务是IIS托管,否则您可以将两者结合起来),这只是处理。您可以使用WCF Web服务和Windows服务用于存储和检索CSV数据的数据库。
答案 1 :(得分:0)
你永远不应该信任参数或期望“所有事情都能正常运行”,你应该使用try / catch语句并实现一些事情来处理错误(在某处记录某些内容,将详细信息发送给客户服务,......)。 / p>
为了防止超时,您应该将WCF服务设置为支持异步操作。
顺便问一下,你的OleDbDataManager是IDisposable吗?如果是这样,你应该包含一个using关键字来防止内存泄漏。
答案 2 :(得分:0)
这里有几点需要考虑: