C# QuickFix/n-登录中的自定义字段
我正在尝试创建基于QuickFix/n的启动器。 我的对手(服务器)要求登录消息包含两个自定义字段。我已经将它们添加到数据字典中的字段和登录消息中。 在代码中,我可以操作消息来添加用户名和密码,但我找不到如何加载自定义字段 以下是我迄今为止所做工作的一些摘录: TradeClientApp.csC# QuickFix/n-登录中的自定义字段,c#,quickfix,quickfixn,C#,Quickfix,Quickfixn,我正在尝试创建基于QuickFix/n的启动器。 我的对手(服务器)要求登录消息包含两个自定义字段。我已经将它们添加到数据字典中的字段和登录消息中。 在代码中,我可以操作消息来添加用户名和密码,但我找不到如何加载自定义字段 以下是我迄今为止所做工作的一些摘录: TradeClientApp.cs … public void ToAdmin(Message message, SessionID sessionID) { QuickFix.SessionSet
…
public void ToAdmin(Message message, SessionID sessionID)
{
QuickFix.SessionSettings settings = new QuickFix.SessionSettings("./initiator.cfg");
List<SessionID> sids = settings.GetSessions().ToList();
Dictionary settingsDict = settings.Get(sids.First());
var appName = settingsDict.GetString("ApplicationName");
var userType = settingsDict.GetString("UserType");
if (message.GetType() == typeof(QuickFix.FIX44.Logon))
{
message.SetField(new Username("USERNAME"));
message.SetField(new Password("PASSWORD"));
message.SetField(new QuickFix.Fields.ResetSeqNumFlag(true));
//tag 9933
message.SetField(new RawData(string.Format($"9933={appName}")));
//tag 20110
message.SetField(new RawData(string.Format($"20110={userType}")));
}
}
在FIX44.XML文件中
<message name="Logon" msgtype="A" msgcat="admin">
<field name="EncryptMethod" required="Y" />
<field name="HeartBtInt" required="Y" />
<field name="RawDataLength" required="N" />
<field name="RawData" required="N" />
<field name="ResetSeqNumFlag" required="N" />
<field name="NextExpectedMsgSeqNum" required="N" />
<field name="MaxMessageSize" required="N" />
<group name="NoMsgTypes" required="N">
<field name="RefMsgType" required="N" />
<field name="MsgDirection" required="N" />
</group>
<field name="TestMessageIndicator" required="N" />
<field name="Username" required="N" />
<field name="Password" required="N" />
<field name="ApplicationName" required="N" />
<field name="UserType" required="N" />
</message>
<fields>
...
<field number="9933" name="ApplicationName" type="STRING"/>
<field number="20110" name="UserType" type="STRING" />
</fields>
</fix>
...
当我尝试连接时,会得到以下日志:
8=FIX.4.49=12035=A34=149=USERNAME52=20191008-21:19:41.49856=TARGETCOMPID96=20110=V98=0108=10141=Y553=USERNAME554=PASSWORD10=097
使用我的示例中所示的RawData,消息携带20110=V作为RawData,即标记96,这对我没有帮助。
我已经试过了
message.Header.SetField(新的StringField(QuickFix.Fields.Tags.UserType,”)代码>
或
message.SetField(新的QuickFix.Fields.UserType(true))代码>
但两者都不起作用
您究竟是如何向登录消息中添加自定义字段的?我认为您的RawData
数据类型有误。这实际上是指原始数据,而不是遵循默认编码的字符串
根据规范:
包含无格式或内容的原始数据的字符串字段
限制。数据字段前面总是紧跟着一个长度
领域长度字段应指定数据的字节数
数据字段的值(直到但不包括终止SOH)
我不太熟悉QuickFIX的C#实现,但您应该能够简单地添加这些带有特定标签号的字段,例如
message.SetField(new StringField(20110, "V"));
我希望没有语法错误,但你应该明白这一点
编辑:我看到您正在手动设置登录消息上的ResetSeqNum字段。这是令人沮丧的。当您在设置中设置ResetSeqNum=Y(您已经有了该设置)时,quickFIX/n应该会处理这个问题。您查看了吗?@GrantBirchmeier我查看了很多页面,包括这一页。我总是在最下面的“.GetString”处停下来,因为我无法让这行代码正常工作。答案是下面的一些像素。经典的老我,恰到好处。非常感谢你。还感谢您提供有关ResetSeqNum的提示。
message.SetField(new StringField(20110, "V"));