无法让 Azure DocumentDB 使用 VB.NET
Cannot get Azure DocumentDB to work with VB.NET
我很难使用 DocumentDB 使用 visual studio 2015 更新 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
您的代码似乎 运行 没问题。我创建了一个新的单分区集合并使用 Microsoft.Azure.DocumentDB nuget 包 1.7.1 和 Newtonsoft.Json 版本 6.0.8 进行了测试。我也尝试更新到 Newtonsoft.json 8.0.3,仍然 运行 没问题。创建文档的请求费用为 5.52
我建议您将方法签名从 Sub 更改为 Function which returns 任务,以便捕获错误 - 否则程序可能会在您的请求完成之前退出。
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 时,没有 return 任务,因此您的代码不会等待任何异步操作完成。
您可以将它包装在一个任务中并像这样调用您的方法:
Sub Main()
Dim task = New Task(AddressOf Test)
task.Start()
task.Wait()
End Sub
这应该可以解决问题。但是,它非常冗长。另一种方法是将 Sub 更改为 Function 和 return 带有某种状态消息的 Task。
希望对您有所帮助。
我很难使用 DocumentDB 使用 visual studio 2015 更新 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
您的代码似乎 运行 没问题。我创建了一个新的单分区集合并使用 Microsoft.Azure.DocumentDB nuget 包 1.7.1 和 Newtonsoft.Json 版本 6.0.8 进行了测试。我也尝试更新到 Newtonsoft.json 8.0.3,仍然 运行 没问题。创建文档的请求费用为 5.52
我建议您将方法签名从 Sub 更改为 Function which returns 任务,以便捕获错误 - 否则程序可能会在您的请求完成之前退出。
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 时,没有 return 任务,因此您的代码不会等待任何异步操作完成。
您可以将它包装在一个任务中并像这样调用您的方法:
Sub Main()
Dim task = New Task(AddressOf Test)
task.Start()
task.Wait()
End Sub
这应该可以解决问题。但是,它非常冗长。另一种方法是将 Sub 更改为 Function 和 return 带有某种状态消息的 Task。
希望对您有所帮助。