Я работаю над примером приложения, в котором есть FixAcceptor и FixInitiator.Я посылаю сообщение MarketDataRequest от инициатора и отправляю сообщение MarketDataIncrementalRefresh от Acceptor, но получаю ошибку исключения FieldNotFound для сообщения NoMDEntries.Я почти уверен, что получил неверное сообщение от получателя, но не смог найти.пожалуйста, помогите, если это возможно.
Это сообщение инициатора исправления
Отправить MarketDataRequest
string symbol = "MSFT";// Отправка запросов MarketData QuickFix42.MarketDataRequest marketDataRequest = new QuickFix42.MarketDataRequest ();
marketDataRequest.set(new MDReqID("1"));
marketDataRequest.set(new SubscriptionRequestType('1'));
marketDataRequest.set(new MarketDepth(1));
marketDataRequest.set(new MDUpdateType(1));
marketDataRequest.set(new AggregatedBook(true));
marketDataRequest.set(new NoMDEntryTypes(2));
QuickFix42.MarketDataRequest.NoMDEntryTypes group = new QuickFix42.MarketDataRequest.NoMDEntryTypes();
group.set(new MDEntryType('0'));
marketDataRequest.addGroup(group);
group.set(new MDEntryType('1'));
marketDataRequest.addGroup(group);
marketDataRequest.set(new NoRelatedSym(1));
QuickFix42.MarketDataRequest.NoRelatedSym group2 = new QuickFix42.MarketDataRequest.NoRelatedSym();
group2.set(new Symbol(symbol));
marketDataRequest.addGroup(group2);
//Send message
Session.sendToTarget(marketDataRequest, sessionID);
Код FixAcceptor
общедоступное переопределение, недействительное onMessage (сообщение QuickFix42.MarketDataRequest, SessionRequest), сообщение QuickFix42.MarketDataRequest)= новое QuickFix42.MarketDataRequest.NoRelatedSym ();
Group g = message.getGroup(1, relatedSymbol);
string symbol=relatedSymbol.get(new Symbol()).getValue();
Console.WriteLine("Got marketdata request for Symbol {0}", symbol );
// Thread.Sleep(1000);
QuickFix42.MarketDataIncrementalRefresh prices = new QuickFix42.MarketDataIncrementalRefresh();
prices.set(new MDReqID("1"));
var mp = new QuickFix42.MarketDataIncrementalRefresh.NoMDEntries();
mp.set(new MDUpdateAction('0'));//tag 279
//price type
mp.set(new MDEntryType('0'));//tag:269
mp.set(new MDEntrySize(2345));
//Symbol
mp.set(new Symbol(symbol));
//Price of the Market Data Entry.
mp.set(new MDEntryPx(36.45d));
prices.addGroup(mp);
try
{
Session.sendToTarget(prices, session);
}
catch (SessionNotFound) { }
}
Получение сообщения MarketDataIncrementalRefresh в FixAcceptor
public override void onMessage(MarketDataIncrementalRefresh message, SessionID session)
{
try
{
System.Console.WriteLine("MarketDataIncrementalRefresh : " + message.ToString());
MDReqID mdreqid = new MDReqID();
NoMDEntries nomdentries = new NoMDEntries();
QuickFix42.MarketDataIncrementalRefresh.NoMDEntries group
= new QuickFix42.MarketDataIncrementalRefresh.NoMDEntries();
MDUpdateAction mdupdateaction = new MDUpdateAction();
DeleteReason deletereason = new DeleteReason();
MDEntryType mdentrytype = new MDEntryType();
MDEntryID mdentryid = new MDEntryID();
Symbol symbol = new Symbol();
MDEntryOriginator mdentryoriginator = new MDEntryOriginator();
MDEntryPx mdentrypx = new MDEntryPx();
Currency currency = new Currency();
MDEntrySize mdentrysize = new MDEntrySize();
ExpireDate expiredate = new ExpireDate();
ExpireTime expiretime = new ExpireTime();
NumberOfOrders numberoforders = new NumberOfOrders();
MDEntryPositionNo mdentrypositionno = new MDEntryPositionNo();
Text text = new Text();
//message.get(mdreqid);
message.get(nomdentries);
int list = nomdentries.getValue();
if (message.isSetNoMDEntries())
for (uint i = 0; i < list; i++)
{
message.getGroup(i + 1, group);
//group.get(mdupdateaction);
//if (mdupdateaction.getValue() == '2')
// Console.WriteLine("Enter");
////group.get(deletereason);
//group.get(mdentrytype);
group.get(mdentryid);
group.get(symbol);
//group.get(mdentryoriginator);
if (mdupdateaction.getValue() == '0')
group.get(mdentrypx);
//group.get(currency);
//if (mdupdateaction.getValue() == '0')
// group.get(mdentrysize);
//group.get(expiredate);
//group.get(expiretime);
//if (mdupdateaction.getValue() == '0')
// group.get(numberoforders);
//group.get(mdentrypositionno);
//group.get(text);
//if (mdupdateaction.getValue() == '0')
//{
// for (int x = 0; x < mainapp.MDlist.Length; x++)
// {
// if (symbol.ToString() == mainapp.MDlist[x].Symbol)
// {
// if (mdentrytype.getValue() == '0')
// mainapp.MDlist[x].Bid = (float)mdentrypx.getValue();
// else if (mdentrytype.getValue() == '1')
// mainapp.MDlist[x].Ask = (float)mdentrypx.getValue();
// }
// }
//}
}
Console.WriteLine("Got Symbol {0} Price {1}", symbol.getValue(), mdentrypx.getValue());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
, но с ошибкой FieldNotFoundException в
message.getGroup (i +)1, группа);