2013-09-24 8 views
5

मैं नीचे के रूप मेंNServiceBus: (संदेश) के लिए मेटाडाटा नहीं मिल सका

_bus.Publish(new BatchCompleted { BatchId = batch.Id}); 

दिखाए संदेश प्रकाशित और एक BatchCompletedHandler में इसे संभाल करने के लिए प्रयास कर रहा हूँ:

public class BatchCompletedHandler: IHandleMessages<BatchCompleted> 
{ 

    public void Handle(BatchCompleted message) 
    { 
      Do Some Stuff... 
    } 
} 

जब भी मैं कोशिश करते हैं और प्रकाशित संदेश मुझे निम्न सिस्टम मिलता है। अपवाद:

'MyAssembly.BatchCompleted' के लिए मेटाडेटा नहीं मिला। संदेशों को या तो 'IMessage', 'IEvent' या 'ICommand' को लागू करने की आवश्यकता है। वैकल्पिक रूप से, यदि आप एक इंटरफ़ेस को कार्यान्वित नहीं करना चाहते हैं, तो आप 'अप्रचलित मोड संदेश' कॉन्फ़िगर कर सकते हैं और कॉन्फ़्रेंस का उपयोग कॉन्फ़िगर करने के लिए कर सकते हैं कि संदेश कैसे मैप किए जाते हैं।

संदेश IEvent को लागू करता है के रूप में नीचे

[Serializable] 
public class BatchCompleted : IEvent 
{ 
    public int BatchId{ get; set; } 
} 

मैं निम्नलिखित कोड

Configure.With(MyAssembly) 

संदेश हैंडलर विधानसभा MyAssembly में है और संदेशों का उपयोग कर रहे हैं एन एस बी को विन्यस्त कर रहा हूँ पता चला MyMessagesAssembly में।

मैं क्या गलत कर रहा हूं?

+0

क्या आप अपनी कॉन्फ़िगरेशन पोस्ट कर सकते हैं? क्या आपका UnicastBusConfig है, संदेश मैपिंग उचित रूप से कॉन्फ़िगर किया गया है? क्या आपके संदेश असेंबली समान .NET संस्करण का उपयोग कर रहे हैं? यानी .net 4.0 का उपयोग करके आपका हैंडलर और आपके संदेश एक .net 4.5 है? सूचकांक के लिए –

+0

धन्यवाद इंदु। यह कॉन्फ़िगरेशन समस्या का कारण बन गया था! –

उत्तर

5

NServiceBus संदेश प्रकार का उपयोग नहीं किया जा रहा है। संदेश एक अलग असेंबली में हैं लेकिन कॉन्फ़िगरेशन एनएसबी को बाइनरी फ़ोल्डर में सभी असेंबली स्कैन करने के डिफ़ॉल्ट व्यवहार के बजाय असेंबली निर्दिष्ट (MyAssembly) को स्कैन करने का कारण बनता है।

Configure.With() 

के विन्यास बदलने से वह सभी विधानसभाओं स्कैन और एन एस बी आवश्यक संदेश प्रकारों को खोजने के लिए अनुमति देगा।

मुझे लगता है कि त्रुटि संदेश थोड़ा भ्रामक है!

config.Conventions() 
      .DefiningCommandsAs(t => t.Namespace != null && t.Namespace.StartsWith("...")) 
      .DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("...")) 
      .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.StartsWith("...")); 

मुझे आशा है कि: http://docs.particular.net/nservicebus/hosting/assembly-scanning

आप नामस्थान सम्मेलनों निर्दिष्ट किया है तो सुनिश्चित करें कि सभी नियमों का सही हैं:

2

एन एस बी 5 में आप AssembliesToScan का उपयोग करके सभी विधानसभाओं के रूप में NServiceBus दस्तावेज़ में विस्तार से बताया स्कैन कर सकते हैं यह उपयोगी होगा

संबंधित मुद्दे