2017-12-27 3 views
0

프로젝트에서 내 요구 사항은 하늘빛 데드 레터의 개수를 얻는 것입니다. 카운트가 0보다 크면 설명이나 죽은 문자의 이유와 같은 모든 죽은 문자 메시지의 세부 정보를 가져 와서 우주 데이터베이스로 저장해야합니다. 내가 코드를 사용하고 죽은 문자 수를 얻으려면 :하늘색 데드 레터 정보 가져 오기 및 코스모스 데이터베이스에 저장

DocumentDBModel objItem = new DocumentDBModel();  
       objItem.DeadLetterReason = "TestReason";  
       objItem.DeadLetterDescription = "TestDescription"; 
       objItem.DeadLetterDate = DateTime.Now;  
       objItem.Body = "TestBody";  
       DbSettings objSettings = new DbSettings();  
       objSettings.Uri = "";  
       objSettings.Key = "";  
       objSettings.DatabaseId = "TestDB";  
       objSettings.Collection = "TestCollection";   
       DocumentDBRepository<DocumentDBModel> abc = new 
     DocumentDBRepository<DocumentDBModel>(objSettings);  
       abc.CreateAsync(objItem).Wait();  

하지만 위의 코드를 실행할 때, 나는 라인에 예외를 얻고있다 :

NamespaceManager namespaceManager=Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(sbConnectionString);  
var abc = namespaceManager.GetQueue("").MessageCountDetails;   
var deadLetterCount = messageDetails.DeadLetterMessageCount;  

과 코스모스 DB에 저장, 코드는

var abc = namespaceManager.GetQueue("").MessageCountDetails;  


<b> Method not found: 'Void System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.Collections.Generic.IEnumerable`1<System.Type>, Int32, Boolean, Boolean, System.Runtime.Serialization.IDataContractSurrogate)'. 
    at Microsoft.ServiceBus.Messaging.MessagingDescriptionSerializer`1.CreateSerializer[T]() 
    at Microsoft.ServiceBus.Messaging.MessagingDescriptionSerializer`1..ctor() 
    at Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.GetAsyncResult`1..ctor(TrackingContext trackingContext, IResourceDescription[] collectionDescriptions, String[] collectionResourceNames, IEnumerable`1 managementAddresses, NamespaceManagerSettings settings, TimeSpan timeout, AsyncCallback callback, Object state) 
    at Microsoft.ServiceBus.NamespaceManager.OnBeginGetQueue(String path, AsyncCallback callback, Object state) 
    at Microsoft.ServiceBus.NamespaceManager.GetQueue(String path) 
    at WebApplication2.Controllers.ValuesController.Get() </b> 

이 문제의 원인이 무엇인지 제안하십시오. - 목록 항목

+0

웹 응용 프로그램의 [WindowsAzure.ServiceBus] (https://www.nuget.org/packages/WindowsAzure.ServiceBus/)의 버전은 무엇입니까? net 핵심 웹 응용 프로그램을 만들고 있습니까? 대상 프레임 워크는 무엇입니까? –

+0

WIndowsAzure.ServiceBus 버전 2.1.0을 사용 중이며 Framework는 ASP.Net Core 2.0입니다. –

답변

1

WindowsAzure.ServiceBus로 노트 다음은 :

이 패키지는 닷넷 프레임 워크 4.5.2 전체 프로필 있어야한다는 사실을 명심해야합니다.

더욱이 WIndowsAzure.ServiceBus 2.1.0을 사용할 때 언급 한 문제와 동일한 문제가 발생할 수 있습니다. 또한 다른 버전도 확인했지만 결국 실패했습니다.

enter image description here

NetCore 2.0의 경우, .NET Standard client library for Azure Service Bus을 활용하고 패키지 Microsoft.Azure.ServiceBus를 참조 할 수 있습니다. 데드 레터 대기열을 가져 오는 데는 tutorial을 따를 수 있습니다.

나의 요구 사항은 하늘빛 데드 레터를 얻는 것입니다. 카운트가 0보다 크면 설명이나 죽은 문자의 이유와 같은 모든 죽은 문자 메시지의 세부 정보를 가져 와서 우주 데이터베이스로 저장해야합니다.

WebAPI 끝점에서이 처리를 처리하는 것으로 나타났습니다. DeadletterQueue/Program.cs에서 언급 한 MessageReceiver.RegisterMessageHandler 콜백을 등록한 다음 .NET Core 2.x의 백그라운드 작업으로 구현하는 것이 좋습니다. 당신이 따라갈 수있는 세부 내용은 here입니다.

또한이 처리를 웹 응용 프로그램에서 배포 할 수 있습니다. WebJob을 사용하여 servicebus 데드 레터 대기열을 트리거 할 수 있습니다 (예 : 특정 대기열의 데드 레터 대기열 이름은 $"{your-queue-name}/$DeadLetterQueue"). DocumentDB 바인딩을 사용하여 데드 레스트 대기열 정보를 우주 데이터베이스에 저장할 수 있습니다. 자세한 내용은 How to use Azure Service Bus with the WebJobs SDKAzure WebJobs SDK Extensions을 참조하십시오.

+0

지원해 주셔서 감사합니다. 나는 너의 제안을 시도 할 것이다. –

관련 문제