【问题标题】:Calling Microsoft Azure functions from Windows Applications从 Windows 应用程序调用 Microsoft Azure 函数
【发布时间】:2020-01-11 06:11:36
【问题描述】:

如何从在本地机器上运行的 Windows 应用程序调用 Azure 上的 Azure 函数,而不在应用程序中嵌入密钥?

是否有像用于 WCF 服务但用于 Azure 功能的客户端代理生成器?还是只使用网络客户端?

【问题讨论】:

  • 触发azure函数的方法有很多种,这取决于你为它设置的输入绑定。
  • @ScottChamberlain : 唯一可能适用的绑定似乎是 http 绑定,但是在 windows 上运行的本地应用程序如何调用 azure 函数?
  • 通过发出简单的 HTTP 请求,例如使用 HttpClient 类?
  • @mm8 :您是否清楚地传递了密钥?如果该应用程序适用于不同的客户怎么办?我们只是把钥匙放在应用程序中吗?
  • @Arjang 如果您打算避免将加密密钥存储为 Windows 应用程序的一部分,正如其他人建议的那样,您可以使用普通的 webapi 并调用对 webapi 的调用。 Web Api 可以将请求转发到您的函数 url。另一种方法是在 azure 函数前面使用 Azure API Gateway,并从 Windows 应用程序访问 API Gateway url。您可以在此处查看此示例以使用 azure api 网关调用函数。 baskarrao.wordpress.com/2017/10/05/…

标签: c# wpf azure azure-functions


【解决方案1】:

您可以使用 Restsharp 访问 Azure 函数。 您将需要从门户获取包含主机密钥的完整 URL。 在门户中导航到您的函数。 使用函数的</> Get function URL 链接来获取完整的 URL(在页面顶部的运行按钮旁边)。关键在"code="

之后
var fullUrl = "https://myfunciton1000.azurewebsites.net/api/ResourceGroupNameExists?code=ENp/dFAluLqHM8TDr...Sk5YJ7DSEbs0PHPzTVw==";
var url = "https://myfunciton1000.azurewebsites.net/api";
var securityCode = "ENp/dFAluLqHM8TDr...YJ7DSEbs0PHPzTVw==";

var client = new RestSharp.RestClient(url);
var request = new RestSharp.RestRequest("ResourceGroupNameExists", RestSharp.Method.POST);
request.AddHeader("x-functions-key", securityCode);
request.AddQueryParameter("ResourceGroupName", "ImageStormSource");


var response = client.Execute(request);

【讨论】:

    【解决方案2】:

    从 .NET 应用程序调用 Azure 函数只需向端点发出 HTTP 请求即可:https://social.msdn.microsoft.com/Forums/azure/en-US/2c676980-8dd3-4112-ae41-a2c4f4825fe3/how-to-call-a-azure-function-from-aspnet-webhook?forum=AzureFunctions

    Azure 和客户端应用程序之间的通信使用 SSL 加密。

    就密钥而言,您可以将其硬编码到您的客户端代码或配置中,或者从您的某些服务中检索它。

    【讨论】:

    • 另外,code key可以用在header x-functions-key中,其值(key)可以在config文件的appSettings中加密。
    【解决方案3】:

    如果您的 azure 函数应用使用 HttpTrigger,则它与任何非 Azure WebAPI 应用没有什么不同。您可以使用基本的 HttpClient 或像 RestSharp 这样的包装库通过 rest 客户端调用它。

    您无需处理任何特殊问题,请查找有关如何调用 WebAPI 应用程序的任何教程以获取更多信息。

    【讨论】:

    • 调用函数需要用到的键呢?你只是在每个应用程序中嵌入它吗?然后在http请求中明确传递?
    • 通常您使用 SSL 调用您的函数,因此密钥不明确。至于存储,是的,您将密钥嵌入到您的应用程序中,这是有多少 Web API 应用程序可以工作,它并不特定于 Azure Functions。另一种选择是将您的 azure 函数设置更改为不需要传入密钥。
    • 有这个场景的示例项目吗?
    • @Arjang 查看 mm8 的链接,接受的答案显示了一个简单的示例。您只需在 azure 门户上查看功能时单击“Get function URL”按钮时,将https://function/webhook 替换为提供给您的任何内容。
    • 无用的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多