2012-02-01 33 views
13

Tôi đang chạy NServiceBus 3.0.0 RC2 nhưng khi tôi khởi động ứng dụng (như quản trị cục bộ) mà không cần tiền tạo ra nó lỗi của MSMQ với:Không tạo hàng đợi tự động trong NServiceBus

Hàng đợi không tồn tại hoặc bạn không có đủ quyền để thực hiện thao tác.

Điều này không xảy ra khi sử dụng NServiceBus 2.6.

Dưới đây là cấu hình của tôi:

var bus = Configure.With() 
    .Log4Net() 
    .NinjectBuilder() 
    .XmlSerializer() 
    .DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t)) 
    .DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t)) 
    .DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t)) 
    .MsmqTransport() 
     .DefineEndpointName("subscriber.input") 
     .IsTransactional(true) 
     .PurgeOnStartup(false) 
    .UnicastBus() 
     .LoadMessageHandlers() 
     .ImpersonateSender(false) 
    .CreateBus() 
    .Start(); 

<configuration> 
    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" /> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" /> 
    </configSections>  
    <MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />  
    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="MyEvents" Endpoint="publisher.input" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

tôi có thể thấy một phương pháp mở rộng cấu hình để vô hiệu hóa tự động tạo ra các hàng đợi nhưng không ai cho phép nó.

Nếu tôi tạo trước hàng đợi, nó hoạt động tốt.

+0

Đau khổ từ cùng một vấn đề này AM ... –

Trả lời

15

Trình cài đặt không tự động chạy khi bạn tự lưu trữ. Vui lòng xem global.asax.cs in the asyncpages sample để biết ví dụ về cách thực hiện thủ công.

using NServiceBus 
using NServiceBus.Installation.Environments 
... 
Bus = Configure.With() 
    .Log4Net() 
    .DefaultBuilder() 
    .XmlSerializer() 
    .MsmqTransport() 
    .IsTransactional(false) 
    .PurgeOnStartup(false) 
    .UnicastBus() 
    .ImpersonateSender(false) 
    .CreateBus() 
    .Start(() => Configure.Instance.ForInstallationOn<Windows>().Install()); 
+0

Điều đó có hiệu quả, cảm ơn –

+0

Tôi nhận thấy rằng điều này không tạo ra hàng đợi TimeOut. Nó sẽ tạo ra nó khi nó cần nó? – Vaccano

+0

Có, nếu trình quản lý thời gian trên hàng đợi sẽ được tạo –

11

Tôi đã giải quyết vấn đề này bằng cách tạo hàng đợi ở phía máy khách theo cách thủ công (được tự lưu trữ).

Không chắc chắn, nhưng tôi nghĩ 2.x đã thực hiện điều này tự động. Máy chủ đang tạo hàng đợi tự động, như mong đợi, nhưng không phải là máy khách (tự lưu trữ).

CẬP NHẬT: Giống như Andreas, senor guardo camino, đã nói, bạn cần phải gọi cài đặt theo cách thủ công như vậy;

.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); 

Điều này sẽ tạo hàng đợi như mong đợi.

+0

Câu trả lời hay. Cảm ơn bạn rất nhiều! – Sergey

+0

Điều này vẫn còn như vậy với phiên bản 5.2.6 và máy chủ NServiceBus 6.0.0? Tôi nhận được: ERROR NServiceBus.Transports.Msmq.MsmqQueueCreator Không thể tạo lỗi hàng đợi @ ... – pashute

Các vấn đề liên quan