无法使Azure DocumentDB与VB.NET一起工作

无法使Azure DocumentDB与VB.NET一起工作,vb.net,azure-cosmosdb,Vb.net,Azure Cosmosdb,我很难使用DocumentDB使用visual studio 2015 update 2和Vb.net创建文档 对CreateDocumentAsync的调用消失了,再也不会回来。我尝试过在C#中使用相同的参数进行相同的调用,它们工作正常,但我的客户要求我使用Vb.NET 我已经将问题简化为一个测试程序,如下所示 Main.vb Imports Microsoft.Azure.Documents Imports Microsoft.Azure.Documents.Client Module M

我很难使用DocumentDB使用visual studio 2015 update 2和Vb.net创建文档

对CreateDocumentAsync的调用消失了,再也不会回来。我尝试过在C#中使用相同的参数进行相同的调用,它们工作正常,但我的客户要求我使用Vb.NET

我已经将问题简化为一个测试程序,如下所示

Main.vb

Imports Microsoft.Azure.Documents
Imports Microsoft.Azure.Documents.Client

Module Module1


    Sub Main()
        Test()
    End Sub

    Public Async Sub Test()

        Dim client As New DocumentClient(New Uri("https://XXXXXXX.documents.azure.com:443/"), "XXXXXXXXX==")


        ' Create a new document


        Dim x As New JGR
        x.id = Guid.NewGuid.ToString()
        x.name = "Graham"
        Dim y As ResourceResponse(Of Document) = Await        client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri("XXXX-Playground", "XXXXXX"), x, Nothing, True)
     End Sub
End Module
JGR.VB

Imports Newtonsoft.Json

Public Class JGR

    <JsonProperty(PropertyName:="id")>
    Property id As String
    Property name As String
End Class
导入Newtonsoft.Json
公共类JGR
属性id为字符串
属性名为字符串
末级

您的代码似乎运行正常。我创建了一个新的单分区集合,并使用Microsoft.Azure.DocumentDB nuget软件包1.7.1和Newtonsoft.Json版本6.0.8进行了测试。我也尝试过更新到Newtonsoft.json 8.0.3,仍然运行良好。创建文档的请求费用为5.52英镑

我建议您将方法签名从Sub更改为返回任务的函数,以便捕获错误-如果不是,程序可能会在您的请求完成之前退出

Sub Main()
    Test().Wait()
End Sub

Public Async Function Test() As Task
    Dim client As New DocumentClient(New Uri("https://stacktest.documents.azure.com:443/"), "g6YlmeYQkoIlrKhuToNIF7kDeHn5VSKiljx4FOijNUtae25cEyNwnKO5TXCT7Y2yWifldxwKb8AIZWhaAtQ5tw==")


    ' Create a new document

    Dim x As New JGR
    x.id = Guid.NewGuid.ToString()
    x.name = "Graham"
    Dim y As ResourceResponse(Of Document) = Await client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri("db1", "col1"), x, Nothing, True)
End Function

您的代码似乎运行得很好。我创建了一个新的单分区集合,并使用Microsoft.Azure.DocumentDB nuget软件包1.7.1和Newtonsoft.Json版本6.0.8进行了测试。我也尝试过更新到Newtonsoft.json 8.0.3,仍然运行良好。创建文档的请求费用为5.52英镑

我建议您将方法签名从Sub更改为返回任务的函数,以便捕获错误-如果不是,程序可能会在您的请求完成之前退出

Sub Main()
    Test().Wait()
End Sub

Public Async Function Test() As Task
    Dim client As New DocumentClient(New Uri("https://stacktest.documents.azure.com:443/"), "g6YlmeYQkoIlrKhuToNIF7kDeHn5VSKiljx4FOijNUtae25cEyNwnKO5TXCT7Y2yWifldxwKb8AIZWhaAtQ5tw==")


    ' Create a new document

    Dim x As New JGR
    x.id = Guid.NewGuid.ToString()
    x.name = "Graham"
    Dim y As ResourceResponse(Of Document) = Await client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri("db1", "col1"), x, Nothing, True)
End Function

我不是一个VB程序员,所以我不完全熟悉VB中的异步,但我很确定问题在于异步代码。调用Sub时,没有返回任务,因此代码不会等待任何异步操作完成

您可以将其包装在任务中,并按如下方式调用您的方法:

Sub Main()
    Dim task = New Task(AddressOf Test)
    task.Start()
    task.Wait()
End Sub
这应该可以解决问题。但是,它非常冗长。另一种方法是将Sub更改为函数,并返回带有某种状态消息的任务


希望这能有所帮助。

我不是VB程序员,所以我对VB中的异步并不完全熟悉,但我很确定问题出在异步代码上。调用Sub时,没有返回任务,因此代码不会等待任何异步操作完成

您可以将其包装在任务中,并按如下方式调用您的方法:

Sub Main()
    Dim task = New Task(AddressOf Test)
    task.Start()
    task.Wait()
End Sub
这应该可以解决问题。但是,它非常冗长。另一种方法是将Sub更改为函数,并返回带有某种状态消息的任务


希望这有帮助。

谢谢-结果是我缺少了一个异常-{“消息:{”“错误”“:[“所有者资源不存在”“]”…知道这意味着什么吗?我猜可能是集合或数据库不存在。请检查您的名称并验证它们是否正确。还要验证这些资源是否在Azure中被删除。感谢您的回复-我检查了所有这些,我想是时候删除它们并尝试重新创建它们了。谢谢-我发现缺少异常-{“消息:{”“错误”“:[”“所有者资源不存在”“]}…知道这意味着什么吗?我猜可能是集合或数据库不存在。请检查您的名称并验证它们是否正确。还要验证这些资源是否在Azure中被删除。感谢您的回复-我检查了所有这些,我想是时候删除它们并尝试重新创建它们。谢谢-这帮助我获得了例外情况:-)谢谢-这帮我得到了例外情况:-)