начало NServiceBus и внедрение зависимости и экземпляров - PullRequest
0 голосов
/ 26 июня 2011

У меня есть некоторые проблемы с NServiceBus, я могу заставить пример pubsub работать нормально, но сейчас я пытаюсь интегрировать его в производственный проект, и я не могу заставить его работать!

Код моего издателя точно такой же, как и в примере с издателем (я только что импортировал проект, чтобы исключить любые другие проблемы), но затем я создаю функцию void и вызываю ее из своего приложения WPF, и я получаю «вы не можете вызов шины без создания экземпляра шины "ошибка

 public void RunTest()
            {
                    var eventMessage = new MarketPriceMessage();
                    eventMessage.Ticker = "IBM";
                    eventMessage.DataType = "Bid";
                    eventMessage.Value = (decimal)23.23423;
                    eventMessage.EventId = Guid.NewGuid();
                    eventMessage.Time = DateTime.Now; // > 30 ? (DateTime?)DateTime.Now : null;
                    eventMessage.Duration = TimeSpan.FromSeconds(99999D);



                    Bus.Publish(eventMessage);
            }

Есть идеи, что там происходит и где я ошибаюсь?

После комментариев @ Адама ниже приведен код, который я использую для внутреннего использования в своем приложении WPF:

    public partial class App : Application
{
    public IBus bus { get; set; }

     protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        NServiceBus.Configure.With()
               .Log4Net()
               .SpringBuilder()
               .XmlSerializer()
               .MsmqTransport()
               .UnicastBus()
               .LoadMessageHandlers()
               .CreateBus()
               .Start();
    }
}

}

и

namespace WpfApplication2
{
    class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher { }

}

и

namespace WpfApplication2
{
    public class SubscriptionAuthorizer : IAuthorizeSubscriptions
    {
        public bool AuthorizeSubscribe(string messageType, string clientEndpoint, string clientWindowsIdentity, IDictionary<string, string> headers)
        {
            return true;
        }

        public bool AuthorizeUnsubscribe(string messageType, string clientEndpoint, string clientWindowsIdentity, IDictionary<string, string> headers)
        {
            return true;
        }
    }
}

App Config

<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
  </configSections>

  <MsmqTransportConfig 
                       InputQueue="WpfApplication2InputQueue" 
                       ErrorQueue="error" 
                       NumberOfWorkerThreads="1" 
                       MaxRetries="5"/>
  <UnicastBusConfig>
    <!--DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">-->
    <MessageEndpointMappings>
    </MessageEndpointMappings>
  </UnicastBusConfig>

Когда я перебираю свой код, я вижу, что шина - это нулевой объект.

Я включаю ссылки как обычно

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Я не слишком знаком с WPF, но похоже, что есть событие Application.Startup, которое может работать. Вам необходимо «вручную» настроить шину, как показано здесь в документах

0 голосов
/ 05 апреля 2013

Если вы не используете Autofac или какой-либо другой контейнер, проблема в том, что вы пропустили присвоение своей переменной шины.Я обычно помещаю это в Global.asax Application_Startup, но этот способ тоже должен работать.

Если вы используете контейнер, и вы зарегистрировали класс, который реализует ваш ServiceContract, вы можете уйтис добавлением локального конструктора / свойства IBus при его создании.

public IBus bus { get; set; }

protected override void OnStartup(StartupEventArgs e)
{
   base.OnStartup(e);

   bus = NServiceBus.Configure.With() // keep a reference to the returned bus. 
           .Log4Net()
           .SpringBuilder()
           .XmlSerializer()
           .MsmqTransport()
           .UnicastBus()
           .LoadMessageHandlers()
           .CreateBus()
           .Start();
}
...