C# 快速修复,是否有一个;“一网打尽”;方法OnMessage来处理未由重载方法处理的传入消息?

C# 快速修复,是否有一个;“一网打尽”;方法OnMessage来处理未由重载方法处理的传入消息?,c#,quickfix,fix-protocol,C#,Quickfix,Fix Protocol,我使用MessageCrackerCrack(message,sessionId)在FromAdmin和FromApp中(我使用quickfix/n的1.4版,message cracker似乎也处理管理消息,至少重载的OnMessage(quickfix.Fix44.Longon消息,SessionID SessionID){}处理正确) 我的问题是:如果我没有为通过MessageCracker的所有传入消息重载所有OnMessage方法,是否存在某种“捕获所有其他”消息方法,用于无法转发到重

我使用MessageCracker
Crack(message,sessionId)在FromAdmin和FromApp中(我使用quickfix/n的1.4版,message cracker似乎也处理管理消息,至少重载的
OnMessage(quickfix.Fix44.Longon消息,SessionID SessionID){}
处理正确)

我的问题是:如果我没有为通过MessageCracker的所有传入消息重载所有OnMessage方法,是否存在某种“捕获所有其他”消息方法,用于无法转发到重载的
OnMessage
方法的传入消息?我不希望QuickFix发送消息被拒绝,因为,例如,一个修复服务器发送了一个未经处理的消息,但是,这对于流程流来说可能不是必需的。我只想自己处理。我觉得在try/catch中处理它并不舒服,因为我觉得这不是最干净的方法

有什么建议吗

谢谢,没有

任何值得尊敬的修复对手都会有一个规范,告诉您他们将向您发送哪些消息类型(以及这些消息可能包含哪些字段)

因此,您应该知道需要支持的所有消息类型,并且可以为每种类型提供
OnMessage
调用

在调用
crack()
之前,可以预先测试消息字符串的类型字段。那会管用,但我认为这是误导。

不,没有

任何值得尊敬的修复对手都会有一个规范,告诉您他们将向您发送哪些消息类型(以及这些消息可能包含哪些字段)

因此,您应该知道需要支持的所有消息类型,并且可以为每种类型提供
OnMessage
调用


在调用
crack()
之前,可以预先测试消息字符串的类型字段。这是可行的,但我认为这是错误的。

< P>你可以考虑尝试/捕捉最干净的方法。

在内部,Crack()方法只是搜索一个可以处理接收到的消息类型的方法(使用反射)。如果找不到它,则抛出一个QuickFix.UnsupportedMessageType异常

重要提示:QuickFix不会通过MessageCracker拒绝不支持的消息,如果需要,您需要通过编程方式拒绝它

当您不知道交易对手将发送的所有消息时,我只能看到以下两种选择:

  • 捕获不受支持的MessageType异常并处理 消息字符串
  • 不捕获异常,通过OnMessage事件忽略它

  • <>你可以考虑尝试/捕捉最干净的方法。

    在内部,Crack()方法只是搜索一个可以处理接收到的消息类型的方法(使用反射)。如果找不到它,则抛出一个QuickFix.UnsupportedMessageType异常

    重要提示:QuickFix不会通过MessageCracker拒绝不支持的消息,如果需要,您需要通过编程方式拒绝它

    当您不知道交易对手将发送的所有消息时,我只能看到以下两种选择:

  • 捕获不受支持的MessageType异常并处理 消息字符串
  • 不捕获异常,通过OnMessage事件忽略它

  • 我完全知道需要哪些消息类型,但如果我编写的接口由于特定的需求而不需要支持它们,我不想被迫实现所有消息类型。另外,我正在编写一个基类,因此无法针对只有派生类才知道的特定消息类型。这听起来像是在以一种非常非正统的方式使用QF/n。我不知道你的要求,但我认为你可能做了一些误导的事情。根据我的经验,大多数交易对手的连接使用的消息类型不超过20种(非管理员);为每个对象编写一个空的或接近空的OnMessage()并不是很麻烦,我会考虑一下。谢谢你的批评,我非常感谢。经过更多的测试,我仍然对使用MessageCracker的正确方法感到困惑。假设我在FromAdmin和ToAdmin中使用了MessageCracker。我的OnMessage(登录消息,SessionID SessionID)在发送登录请求和接收登录回复时被调用两次。我如何区分这两者?我需要在登录请求中添加用户名和密码,但在收到登录确认回复时,我显然不想这样做。您应该只在FromApp内部调用它,因为它旨在帮助您解码收到的应用程序消息。破解传出的消息是没有意义的。(你不应该破解FromAdmin,因为你通常不想为管理员消息定义特殊处理。我的意思是,没有理由处理心跳,对吧?)我完全知道需要哪些消息类型,但如果我编写的接口由于特定的需求而不需要支持它们,我不想被迫实现所有消息类型。另外,我正在编写一个基类,因此无法针对只有派生类才知道的特定消息类型。这听起来像是在以一种非常非正统的方式使用QF/n。我不知道你的要求,但我认为你可能做了一些误导的事情。根据我的经验,大多数交易对手的连接使用的消息类型不超过20种(非管理员);为每个对象编写一个空的或接近空的OnMessage()并不是很麻烦,我会考虑一下。谢谢你的批评,我非常感谢。经过更多的测试,我仍然对使用MessageCracker的正确方法感到困惑。假设我在FromAdmin和ToAdmin中使用了MessageCracker。我的OnMessage(登录消息,SessionID SessionID)在sendi时被调用两次