2010-08-25 4 views
6

Mit Version 2.0.0.1219Kann nicht selbst Host arbeiten auf NServiceBus

Ich versuche, auf Selbst Host sowohl einen Abonnenten und Verleger mit NServiceBus und VS2010 erhalten. Die Programme werden ausgeführt und initialisiert, aber ich kann die Nachrichten nicht übertragen. Der Verlag verhält sich, als würde er posten, keine Fehler, aber der Abonnent erhält nichts. Hier

ist die ANSCHL.EINSTELLUNGEN

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

    <!-- in order to configure remote endpoints use the format: "[email protected]" 
     input queue must be on the same machine as the process feeding off of it. 
     error queue can (and often should) be on a different machine. 
    --> 

    <MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> 

    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="NServiceMessage" Endpoint="loads"/> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> 

Und der Verlag Config

<?xml version="1.0"?> 
<configuration> 

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

    <MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> 

    <UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo=""> 
    <MessageEndpointMappings> 
     <!-- publishers don't need to set this for their own message types --> 
     <!--<add Messages="Messages" Endpoint="messagebus" />--> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 

</configuration> 

Hier ist der Verlag Code:

class Program 
{ 
    private static IBus _serviceBus; 

    static void Main(string[] args) 
    { 
     _serviceBus = Configure.With() 
      .Log4Net() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqSubscriptionStorage() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     while (true) 
     { 
      Console.WriteLine("Press a key to send data."); 
      Console.ReadKey(); 
      SendMessaage(); 
     } 
    } 


    private static void SendMessaage() 
    { 
     LoadMessage message = GetNextMessage(); 
     _serviceBus.Publish(message); 
    } 

    private static LoadMessage GetNextMessage() 
    { 
     LoadMessage result = new LoadMessage(); 

     result.DeliveryDate = DateTime.Today.AddDays(3).ToShortDateString(); 
     result.DestinationCity = "Boise"; 
     result.DestinationCountry = "USA"; 
     result.DestinationState = "ID"; 
     result.EventId = Guid.NewGuid(); 
     result.Time = DateTime.Now.ToUniversalTime(); 
     result.OriginState = "OR"; 
     result.OriginCity = "Portland"; 
     result.OriginCountry = "USA"; 
     result.EquipmentID = 3; 

     return result; 
    } 
} 

und der Teilnehmercode

class Program 
{ 
    private static IBus _serviceBus; 
    private static LoadMessageHandler _messageHandler; 

    static void Main(string[] args) 
    { 
     _messageHandler = new LoadMessageHandler(); 

     _serviceBus = Configure 
      .With() 
      .Log4Net() 
      .DefaultBuilder() 
      .BinarySerializer() 
      .MsmqSubscriptionStorage() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     Console.ReadKey(); 
    } 
} 

Und die Nachrichtencode

public class LoadMessageHandler : IHandleMessages<LoadMessage> 
{ 
    public void Handle(LoadMessage message) 
    { 
     Console.WriteLine(String.Format("GUID: {0}", message.EventId)); 
    } 
} 
+0

Um die Ursache dieses Problems zu ermitteln, ist ein vollständigerer Code erforderlich, einschließlich Namespaces und Ziel-DLLs. NServiceMessage in bezieht sich auf die DLL, in der der LoadMessage-Typ definiert ist. – Cirdec

Antwort

5

Weitere Probleme:

1: Der msmq Transport muss als transaktionale für den Verlag so konfiguriert werden, Abonnement-Nachrichten zu akzeptieren. Ein Beispiel für die Konfiguration finden Sie in http://blogs.planbsoftware.co.nz/?p=234.

2: Publisher verwendet XmLSerializer und Abonnent verwendet BinarySerializer, was sie inkompatibel macht.

+0

Danke, das ist es, es ist die zweite Hälfte von dem, was ich falsch gemacht habe. – Steve

5

Sie scheinen die gleiche Eingangswarteschlange für beide Endpunkte zu verwenden, bewegen Sie sich auf seine eigene Warteschlange Teilnehmer und sehen, ob das funktioniert.

Auch das Konfigurieren eines Abonnementspeichers für Ihren Abonnenten ist nicht erforderlich, da der Herausgeber für das Speichern der Abonnementinformationen zuständig ist.

Hoffe, das hilft!

+0

Danke, es ist die erste Hälfte von dem, was ich falsch verstanden habe. – Steve

Verwandte Themen