2010-06-01 24 views
10

Tôi đã .net 4.0 ứng dụng chuyển từ net 3.5 có sử dụng net.msmq chạy trên server 2008 x64MSMQ sự cố kích hoạt WCF với .net 4.0 và server 2008

Cài đặt

  • Dịch vụ net.msmq với giải quyết "net.msmq: //localhost/private/msmqdataservice.svc"
  • net.msmq endpoing với địa chỉ "net.msmq: //localhost/private/msmqdataservice.svc"
  • hàng đợi trong MSMQ -> name = "$ private \ msmqdataservice.svc"

mọi thứ đang hoạt động ngay bây giờ với .net 3.5.

Tôi đã cài đặt .net 4.0 trên máy chủ và tạo trang web mới để dàn dựng trên cùng một hộp.

mới thiết lập dàn msmq là

  • Dịch vụ net.msmq với địa chỉ "net.msmq: //localhost/private/staging/msmqdataservice.svc"
  • net.msmq endpoing với địa chỉ "net. msmq: //localhost/private/staging/msmqdataservice.svc"
  • hàng đợi trong MSMQ -> name = "$ tin \ dàn/msmqdataservice.svc"

tạo một hàng đợi cho trang web khác nhau.

Một thay đổi khác mà tôi đã thực hiện với trang web mới là đây là trang web khác trong iis với việc nghe trên địa chỉ IP khác nhau. Tôi đã để lại net.msmq ràng buộc với 'localhost'. Trang web chính cũng có cùng một ràng buộc cho net.msmq -> 'localhost'. Tôi nghĩ đó là lý do. Xin vui lòng chỉ ra nếu cần một số cấu hình khác nhau.

Issue là yêu cầu của tôi đang làm cho vào hàng đợi nhưng không nhận được nhặt bằng cách áp dụng nó chỉ nằm ở đó

Không có dấu hiệu của bất cứ điều gì sai trong nhật ký. Chỉ có điều tôi thấy trong nhật ký liên quan đến điều này là một cảnh báo "msmqactivation không thể khám phá hàng đợi". Mặc dù cảnh báo này tôi chưa bao giờ hiểu chính xác như chúng ta đã thấy điều này luôn luôn với tất cả mọi thứ tốt với msmq trong 3.5.

Bất cứ điều gì tôi có thể nghĩ là đã được xác minh và chính xác.

  • Hồ bơi ứng dụng của ứng dụng đang chạy dưới dạng dịch vụ mạng và có toàn quyền truy cập vào hàng đợi.
  • dịch vụ kích hoạt net.msmq đang chạy với dịch vụ mạng
  • Cố gắng quy ước đặt tên khác nhau của url dịch vụ với kết quả tương tự

Tóm tắt

Vui lòng cung cấp bất kỳ cái nhìn sâu sắc vào nhiều trang web thiết lập với mạng. msmq. Tôi đang sử dụng ràng buộc net.msmq với giá trị = 'localhost' cho cả hai trang web. Tôi nghĩ rằng đó là bản sắc machinename.

Bất kỳ cách nào để chẩn đoán sự cố này?

Bất kỳ điều gì khác bạn có thể nghĩ có thể hữu ích.

Chúng tôi phải ngừng phát hành ngày hôm qua sau khi chi tiêu như 100 giờ đồng hồ, chúng tôi không thể tìm ra vấn đề là gì. Cũng không thể làm cho nó phá vỡ trong máy phát triển của tôi.

Sửa

Issue là sau khi tạo trang web mới quy ước đặt tên không hoạt động như

Dịch vụ net.msmq

với địa chỉ "net.msmq: //localhost/private/staging/msmqdataservice.svc" net.msmq endpoing với địa chỉ "net.msmq: //localhost/private/staging/msmqdataservice.svc" hàng đợi trong MSMQ -> name = "$ private \ staging/msmqdataservice.svc"

nó hoạt động với tên dịch vụ net.msmq: //localhost/private/msmqdataservice.svc

nhưng bây giờ tôi không thể có hai trang web sử dụng chính xác cùng điểm cuối.

Bất kỳ cách nào để có cùng điểm cuối trong hai trang web khác nhau với url khác nhau và hàng đợi khác nhau trong cùng một máy?

Trả lời

0

Cách sử dụng cổng khác? Bạn có thể sử dụng cùng tên máy chủ và yêu cầu WAS kích hoạt trên cổng mới trong vdir hoặc trang web mới.

+0

Msmq prortocol không có tùy chọn cổng. –

0

Thật không may, người nghe sử dụng tên dịch vụ để xác định xếp hàng để lắng nghe cho nên nếu dịch vụ tiếp nhận của bạn được gọi

MYOrganisation.Services.MyService.svc 

hàng đợi của bạn nên được gọi là

net.msmq://localhost/MYOrganisation.Services/MyService.svc 

Vì vậy, hàng đợi là được gọi là:

MYOrganisation.Services/MyService.svc 

Hãy thử điều này và lấy lại cho tôi. Tôi có thể đăng một ví dụ đầy đủ về cấu hình hoạt động. Nó xảy ra với tôi rằng mặc dù bạn có thể không có 2 điểm cuối khác nhau, bạn có thể có cùng một dịch vụ với một không gian tên khác (hoặc chỉ đổi tên dịch vụ) nghe một hàng đợi khác. Không phải lý tưởng, nhưng đó là điều duy nhất tôi tìm thấy sẽ hoạt động.

0

URI của điểm cuối dịch vụ của bạn phải khớp (nhiều hơn hoặc ít hơn, cf http://msdn.microsoft.com/en-us/library/ms789042.aspx) tên hàng đợi. Vì vậy, ở đây, giải pháp sẽ là tạo một thư mục ảo có tên là dàn dựng và đặt dịch vụ của bạn ở đó.

Đối với thông tin liên kết, điểm lưu trữ cục bộ với máy chủ là trình lắng nghe hàng đợi shoudl được lắng nghe vì vậy nếu hàng đợi của bạn được cài đặt trên cùng một máy như IIS, shoumld này thực sự là localhost.

3

Bản sửa lỗi cho tôi là cài đặt AppFabric cho Windows Server v1.1. (Phải dành cho bất kỳ ai sử dụng WAS/IIS lưu trữ các dịch vụ WCF hoặc các ứng dụng WF.)

Điều này cũng khắc phục được sự cố mà tôi gặp phải với quá trình WS bị lỗi mỗi lần tạo hàng đợi không phải WCF. Trình gỡ lỗi Just-In-Time đã ném điều này:

System.ServiceModel.EndpointNotFoundException was unhandled 
     Message=The service '~/nonWcfQueueName' does not exist. 
     Source=System.ServiceModel.Activation 
     StackTrace: 
      at System.ServiceModel.ServiceHostingEnvironment.NormalizeVirtualPath(String virtualPath) 
      at System.ServiceModel.Channels.MsmqHostedTransportManager.HostedBindingFilter.MatchFound(String host, String name, Boolean isPrivate) 
      at System.ServiceModel.Channels.MsmqBindingMonitor.MatchQueue(MatchState state) 
      at System.ServiceModel.Channels.MsmqBindingMonitor.ProcessFoundQueues(MessageQueue[] queues, Dictionary`2 knownQueues, Boolean isPrivate) 
      at System.ServiceModel.Channels.MsmqBindingMonitor.OnTimer(Object state) 
      at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
      at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) 
      at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 
     InnerException: 

Tôi đoán không nhiều người cần kết hợp hàng đợi WCF/không phải WCF trên cùng một máy.Hy vọng điều này sẽ cứu một người khỏi cơn đau mà tôi đã trải qua trong tuần qua!

+1

teoduolog bạn là người đàn ông! –

0

Cũng là một điểm thú vị: Dịch vụ bộ điều hợp danh sách net.msmq dường như lưu vào bộ nhớ cache thực tế là nó không thể truy cập hàng đợi. Nếu nó cố truy cập hàng đợi cho dịch vụ của bạn và không thành công, và sau đó bạn thêm quyền cho bộ điều hợp trình nghe net.msmq, nó vẫn không hoạt động. Tôi khởi động lại dịch vụ và sau đó hàng đợi bắt đầu được xem lại.

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