azure - 使用 ServiceBusTrigger 的 Azure 函数在 Xamarin.Android 应用程序中不起作用
问题描述
当我的 Android 应用程序调用我的 Azure 函数时,它不会触发。
测试:
以下测试通过 ServiceBusTrigger 成功触发 Azure 函数:
[<Fact>]
let ``Publish message assigned to servicebus topic``() =
// Setup
let connectionstring = ConfigurationManager.ConnectionStrings.["servicebus_testEnv"].ConnectionString
// Test
async {
let client = TopicClient(connectionstring, "Topic.courier-subscribed")
let data = "test_data"
let message = Message(Encoding.UTF8.GetBytes(data))
do! client.SendAsync(message) |> Async.AwaitTask
do! client.CloseAsync() |> Async.AwaitTask
}
问题:
但是,当我将代码插入我的 Xamarin Android 应用程序时,Azure 函数永远不会被触发。
相反,我只观察到以下错误:
System.TimeoutException:“对象 session5 的操作未在分配的时间 00:00:49.9480520 内完成。”
Xamarin.Android:
这是我的 Xamarin Android 应用程序中的代码:
let subscribe : Subscribe =
fun request ->
async {
let body = {
Courier = request.Courier
Location = request.Location
Timestamp = DateTime.Now
}
try
let connectionstring = QueueTopic.Instance.ConnectionString
let client = TopicClient(connectionstring, "Topic.courier-subscribed")
let json = JsonConvert.SerializeObject(body)
let message = Message(Encoding.UTF8.GetBytes(json))
do! client.SendAsync(message) |> Async.AwaitTask
do! client.CloseAsync() |> Async.AwaitTask
return Ok body
}
Azure 函数(ServiceBusTrigger):
public static class SubscribedFn
{
[FunctionName(nameof(SubscribedFn))]
public static async Task Run([ServiceBusTrigger("Topic.courier-subscribed", "Subscription.all-messages", Connection= "ServiceBusConnectionKey")]
string json, ILogger log)
{
... // NEVER INVOKED
}
笔记:
我已验证连接字符串与我的自动化测试相同。
自动化测试每次都会通过 ServiceBusTrigger 触发 Azure 功能。
我已验证我在两个客户端中都将 JSON 作为有效负载发送
解决方案
您的设备上可能存在网络问题。ServiceBus 默认使用 AMQP 协议。在大多数情况下,您需要在传出连接上打开端口 5671 和 5672。
对于您的 Xamarin 应用程序,我建议附加;TransportType=AmqpWebSockets
到您的连接字符串,看看是否有帮助。
端点=sb://xxxx.servicebus.windows.net/;SharedAccessKeyName=xxxx;SharedAccessKey=xxxxx;TransportType=AmqpWebSockets
推荐阅读
- python - 使用 tkinter/grid 将自动滚动的 Treeview 放入框架中
- linux - 使用 Find 查找与文件中定义的列表具有相似名称的文件。可能的?
- php - 为什么我的值没有发布到 SQL Server DB 但它也没有给出错误
- java - 当实际对象被垃圾收集时,WeakHashMap 中的条目中的值如何被垃圾收集?
- javascript - 试图在反应 jsx 中给出一个常量 this.state
- google-cloud-platform - 谷歌云计算引擎实例自动创建,不是我创建的
- python - Keras Conv2d 转置
- amazon-web-services - 为 AWS EC2 Windows Server 2012 实例重置管理员密码
- java - 如何为不同的形状使用不同的颜色
- activeadmin - 使用 Active Storage 在 active_admin 中上传多个图像