QuickFix错误:58 =有条件必填字段缺失(268)

时间:2014-11-14 19:29:09

标签: c++ quickfix

这是服务器配置文件

[DEFAULT]
ConnectionType=acceptor
SocketAcceptPort=5001
SocketReuseAddress=Y
StartTime=00:00:00
EndTime=00:00:00
FileLogPath=log
FileStorePath=store
[SESSION]
BeginString=FIX.4.4
SenderCompID=EXECUTOR
TargetCompID=CLIENT1
DataDictionary=/home/idf/Documents/quickfixspec/spec/FIX44.xml

我有一个FIXServer和FIXClient quickfix应用程序。连接上的客户端立即显示:

IN: 8=FIX.4.4|9=197|35=X|34=34|49=EXECUTOR|52=20141114-19:12:07.219|56=CLIENT1|55=bond3|110=0|268=1|269=0|270=100.272681729868|271=0|278=1862140492|279=0|6350=0|6351=0|6360=0.0528078713919967|6361=0.00698885442689061|10=158

OUT: 8=FIX.4.4|9=123|35=j|34=45|49=CLIENT1|52=20141114-19:12:07.220|56=EXECUTOR|45=34|58=Conditionally Required Field Missing(268)|372=X|380=5|10=139

服务器显示:

IN: 8=FIX.4.4|9=123|35=j|34=46|49=CLIENT1|52=20141114-19:12:12.220|56=EXECUTOR|45=35|58=Conditionally Required Field Missing (268)|372=X|380=5|10=137

OUT: 8=FIX.4.4|9=193|35=X|34=36|49=EXECUTOR|52=20141114-19:12:17.221|56=CLIENT1|268=1|279=0|269=0|278=500257692|55=bond|5270=99.54393400065|6271=0|110=0|6350=0|6351=0|6360=0.0107738308608532|6361=0.047250702092424|10=154

我在http://www.fixtradingcommunity.org/FIXimate/FIXimate3.0/查看了这个内容,它是“市场数据消息中的条目数。”

看起来服务器正在发送Marketdata而没有指定NoMDEntries的数量?这有点奇怪,因为无论如何,对于Java版本,此字段似乎会自动设置,例如http://www.quickfixj.org/quickfixj/usermanual/1.5.3/usage/repeating_groups.html

这是导致客户端出现问题的行,因为它从服务器获取MarketData。我添加了try catch块,所以我自己可以看到异常,但它提供的信息少于让QF处理异常并通过[OUT:]

将其发送回服务器的信息。
void MyApplication::fromApp( const FIX::Message& message, const FIX::SessionID& sessionID )
throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType )
{
    std::cout << std::endl << "IN: " << message << std::endl;
    try
    {
        crack( message, sessionID );
    }
    catch(std::exception& ex)
    {
        //I suppose I could comment out FIX::FieldNotFound above in the throw clause and ignore this exception 
       /// here since it seems that the thing is plain wrong since the field IS there!!??
        std::cout << "crack exception: " << ex.what() << "\n";
    }
}

0 个答案:

没有答案