2017-12-27 21 views
0

プロジェクトでは、私の要件は、晴れのデッドレターのカウントを取得することです。カウントが0より大きい場合、デッドレターの説明や理由のようなデッドレターメッセージの詳細を取得し、コスモスdbに保存する必要があります。晴れのデッドレター情報を取得し、コスモスのデータベースに保存

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

とコスモスDBに保存し、コードは次のとおりです:

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();  

しかし、私は上記のコードを実行するとき、私はラインで例外を取得しています:

私は、コードを使用していますデッドレターカウントを取得するには
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/)のバージョンは何ですか?あなたは、コアコアのWebアプリケーションを作成していますか?対象となるフレームワークは何ですか? –

+0

私はWIndowsAzure.ServiceBusバージョン2.1.0を使用しています。フレームワークはASP.Net Core 2.0です。 –

答えて

1

WindowsAzure.ServiceBusとしてノートは次のように:

このパッケージは、.NET Frameworkの4.5.2プロフィールを必要とすることに注意してください。

さらに、私はWIndowsAzure.ServiceBus 2.1.0を使用するときに述べたのと同じ問題に遭遇する可能性があります。また、私は他のバージョンをチェックしましたが、最後は失敗しました。

NetCore 2.0のために、あなたは.NET Standard client library for Azure Service Busを活用し、パッケージMicrosoft.Azure.ServiceBusを参照することができます。デッドレターキューを取得するには、このtutorialに従うことができます。

私の要件は、紺碧のデッドレターのカウントを取得することです。カウントが0より大きい場合、デッドレターの説明や理由のようなデッドレターメッセージの詳細を取得し、コスモスdbに保存する必要があります。

この処理は、WebAPIエンドポイント内で処理することに気付きました。 DeadletterQueue/Program.csに記載されているMessageReceiver.RegisterMessageHandlerコールバックを登録し、.NET Core 2.xのバックグラウンドタスクとして実装することをお勧めします。あなたが従うことができる詳細here

また、この処理をWebアプリケーションから配布することもできます。また、WebJobを利用してサービスバスのデッドレターキューを起動することもできます(特定のキューのデッドレターキュー名は、$"{your-queue-name}/$DeadLetterQueue")。DocumentDBバインディングを使用してデッドレターキュー情報をコスモスデータベースに保存します。詳細は、How to use Azure Service Bus with the WebJobs SDKAzure WebJobs SDK Extensionsを参照してください。

+0

ありがとうございます。私はあなたの提案を試みます。 –

関連する問題