У меня есть функция Azure, которая подписана на очередь служебной шины Azure, однако, прежде чем функция сможет инициировать исключение, во время выполнения выдается исключение, прежде чем она достигнет любого из моего кода.
Exception while executing function: <functionName>. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'message'. System.Private.CoreLib: Unable to translate bytes [9A] at index 60 from specified code page to Unicode.
В этом случае я не контролирую входящее сообщение (оно на самом деле отправляется из подписки DevOps Azure), поэтому мне нужно иметь возможность сделать функцию более гибкой, чтобы исключить это исключение.
Моя функция выглядит так:
[FunctionName("FunctionName")]
public static async Task Run(
[ServiceBusTrigger("Queue", Connection = "ConnectionString")] byte[] message)
Я видел другой вопрос, который предлагает отойти от использования Message
или BrokeredMessage
объекта и использовать вместо него byte[]
(и написать свою собственную кодировку для решения этой проблемы), но это не сработало для меня , Похоже, что среда выполнения все еще пытается что-то сделать с сообщением, прежде чем оно достигнет моей функции.
Как мне избежать этой проблемы?
Я оставлю этот вопрос открытым, потому что я еще не нашел, как решить эту проблему - однако теперь я видел, как исправить это в моем случае. Сообщения, которые я изо всех сил пытался обработать, - это сообщения, которые доставляются AzureDevOps ServiceHooks . Если я захожу в настройки (при создании или редактировании) сервисные хуки найдены здесь -> https: //.visualstudio.com//_settings/serviceHooks
Есть флажок, который я пропустил. Чтобы функция Azure могла обрабатывать сообщение, необходимо установить этот флажок. То есть Вы хотите отправить как не сериализованную строку. Это должно быть потому, что любой клиент находится между моей функцией и очередью и не может обрабатывать сериализованное сообщение .Net.
Tl; Dr -> Если у вас есть эта проблема, убедитесь, что выбрана эта опция выше
GitHub Issue Отслеживание проблемы