我有一个接收基类型参数的方法,并根据实际参数类型执行一些预处理.
这是我的代码:
public void OnMessageReceived(QuickFix42.Message message)
{
if (message is QuickFix42.ExecutionReport)
{
ProcessExecutionReport(message as QuickFix42.ExecutionReport);
}
else if (message is QuickFix42.AllocationACK)
{
ProcessAllocationAck(message as QuickFix42.AllocationACK);
}
else if (message is QuickFix42.OrderCancelReject)
{
ProcessOrderCancelReject(message as QuickFix42.OrderCancelReject);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但我从Visual Studio得到以下警告:
Warning 760 CA1800 : Microsoft.Performance : 'message', a parameter, is cast to type 'ExecutionReport' multiple times in method 'MessageProcessor.OnMessageReceived(Message)'. Cache the result of the 'as' operator or direct cast in order to eliminate the redundant isint instruction.
避免这些多余演员的最佳方法是什么?
我正在使用 REST API,并有以下处理付款请求的场景:
\n\n我希望第三方API和我自己的数据库之间的数据保持一致。但是,如果由于某种原因在步骤 3 中无法访问数据库,我最终会得到不一致的数据 \xe2\x80\x94 付款将存在于第三方 API 中,但不存在于我自己的 API 数据库中。
\n\n处理这个一致性问题的最佳方法是什么?
\n在通过WCF发送具有导航属性的Entity Framework生成的实体时遇到问题.我有一个Securities用于存储财务数据的数据库和其中的两个表:
Stock : Id, Symbol, CompanyName, ExchangeName
Option: Id, StockId, OptionType, Strike
我为这个数据库创建了一个Entity Framework模型.然后我创建了WCF服务,它将生成的Stock和OptionEF实体公开给客户端.
我生成的实体Stock具有导航属性EntityCollection<Option> Options.当尝试将Stock实体从WCF服务返回到客户端时,我得到SerializationException:WCF无法序列化Options导航属性,因为数据库连接已经关闭.
我可以Options.Load()在打开数据库连接时调用方法来填充Options属性,但如果我不想为Stock实体加载完整的对象图,我该怎么办?
通常,您使用模式或代码契约检查公共方法中的传入参数if-then-throw 。
我的问题是,我应该如何验证 WCF 服务中传递的参数?例如,我有以下合同:
[OperationContract]
Stock GetStock(string symbol);
Run Code Online (Sandbox Code Playgroud)
我想确保symbol参数不是null空字符串。我应该if-then-throw在服务端使用相同的模式或代码契约前提条件吗?我应该FaultContract向该GetStock方法添加属性并向客户端返回错误吗?WCF 服务的最佳参数验证技术是什么?
c# ×2
wcf ×2
.net ×1
api ×1
casting ×1
performance ×1
quickfix ×1
rest ×1
transactions ×1
validation ×1