Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取azure死信信息并保存到cosmos db中_C#_Asp.net_.net_Azure_Asp.net Core - Fatal编程技术网

C# 获取azure死信信息并保存到cosmos db中

C# 获取azure死信信息并保存到cosmos db中,c#,asp.net,.net,azure,asp.net-core,C#,Asp.net,.net,Azure,Asp.net Core,在项目中,我的要求是获得azure死信的计数。如果计数大于0,则我必须获得每个死信消息的详细信息,如死信的描述或原因,并保存到cosmos db中。 要获取死信计数,我使用以下代码: NamespaceManager namespaceManager=Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(sbConnectionString); var abc = namespaceManager.GetQueu

在项目中,我的要求是获得azure死信的计数。如果计数大于0,则我必须获得每个死信消息的详细信息,如死信的描述或原因,并保存到cosmos db中。 要获取死信计数,我使用以下代码:

NamespaceManager namespaceManager=Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(sbConnectionString);    
var abc = namespaceManager.GetQueue("").MessageCountDetails;        
var deadLetterCount = messageDetails.DeadLetterMessageCount;    
并保存到cosmos 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();    
DocumentDBModel objItem=new DocumentDBModel();
objItem.DeadLetterReason=“TestReason”;
objItem.DeadLetterDescription=“TestDescription”;
objItem.DeadLetterDate=DateTime.Now;
objItem.Body=“TestBody”;
DbSettings objSettings=新的DbSettings();
objSettings.Uri=“”;
objSettings.Key=“”;
objSettings.DatabaseId=“TestDB”;
objSettings.Collection=“TestCollection”;
DocumentDBRepository abc=new
文档数据库存储库(objSettings);
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>
var abc=namespaceManager.GetQueue(“”).MessageCountDetails;
找不到方法:“Void System.Runtime.Serialization.DataContractSerializer..ctor(System.Type,System.Collections.Generic.IEnumerable`1,Int32,Boolean,Boolean,System.Runtime.Serialization.IDataContractSurrogate)”。
在Microsoft.ServiceBus.Messaging.MessagingDescriptionSerializer`1.CreateSerializer[T]()
在Microsoft.ServiceBus.Messaging.MessagingDescriptionSerializer`1..ctor()中
位于Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.GetAsyncResult`1..ctor(TrackingContext TrackingContext,IResourceDescription[]collectionDescriptions,String[]collectionResourceNames,IEnumerable`1 managementAddresses,NamespaceManagerSettings设置,TimeSpan超时,异步回调,对象状态)
位于Microsoft.ServiceBus.NamespaceManager.OnBeginGetQueue(字符串路径、异步回调、对象状态)
位于Microsoft.ServiceBus.NamespaceManager.GetQueue(字符串路径)
在WebApplication2.Controllers.ValuesController.Get()上
请说明此问题的原因。 -将项目列为注释,如下所示:

请注意,此软件包需要.Net Framework 4.5.2完整配置文件

此外,在使用
WIndowsAzure.ServiceBus 2.1.0
时,我可能会遇到与您提到的相同的问题。另外,我检查了其他版本,但最终失败了

对于NetCore 2.0,您可以利用并引用包。要检索死信队列,可以遵循以下步骤

我的要求是计算死信的数量。如果计数大于0,则我必须获得每个死信消息的详细信息,如死信的描述或原因,并保存到cosmos db中

我注意到您在WebAPI端点中处理此处理。我建议您注册下面提到的
MessageReceiver.RegisterMessageHandler
回调,然后将其作为.NETCore2.x中的后台任务实现。你可以关注细节


此外,您可以将此处理从web应用程序中分发出去。您可以利用触发servicebus死信队列(例如,特定队列的死信队列名称如下:
$“{your queue name}/$DeadLetterQueue”
),并使用DocumentDB绑定将死信队列信息保存到cosmos db中。详细信息,您可以参考和。

您的web应用程序的版本是什么?您正在创建net core web应用程序,目标框架是什么?我使用的是WIndowsAzure.ServiceBus版本2.1.0,框架是ASP.net core 2.0非常感谢您的支持。我会试试你的建议。