当我的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
}
NOTE:
我已验证连接字符串与我的自动化测试相同。
自动测试每次都会通过ServiceBusTrigger触发Azure功能。
我已经确认我正在两个客户端中都将JSON作为有效负载发送
您的设备上可能存在网络问题。默认情况下,ServiceBus使用AMQP协议。在大多数情况下,您需要在传出连接上打开端口5671和5672。