Тип... не был зарегистрирован в сериализаторе (не веб-приложение)
Я пытаюсь отправить команду с NServiceBus 3.0. Все работает, когда я посылаю команду, которая реализует ICommand. Тем не менее, это не работает, если я использую соглашения. Источник ниже. Может кто-нибудь сказать мне, что я делаю не так?
public class Program
{
public static NServiceBus.IBus Bus { get; private set; }
static void Main(string[] args)
{
ConfigureBus();
var command = new RouteTradeCommand() { TradeXml = "<trade />" };
Bus.Send("BrokerQueue@DATPCDI041", command);
}
private static void ConfigureBus()
{
Bus = Configure.With()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.UnicastBus()
.DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith("Messages"))
.SendOnly();
}
}
Команда выглядит так:
namespace Messages
{
public class RouteTradeCommand : IRouteTradeCommand
{
public string TradeXml { get; set; }
}
}
1 ответ
Решение
К сожалению, NSB зависит от порядка методов конфигурации. Это сработает, если вы переместите метод DefiningCommandsAs сразу после With:
NServiceBus.Configure.WithWeb()
.DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith(".Commands"))
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.DefineEndpointName("Web")
.UnicastBus()
.SendOnly();