简短版本
我们想要迁移到 v4,并且我们的应用程序名称少于 32 个符号。
我们应该迁移到专用Storage Accounts还是不迁移?
长版本
我们使用Azure Functionsv3。从一开始,Storage Account就有 10 多个人共享一个Azure Function Apps。这可能是运气好,但名称少于 32 个符号,而且不会改变。我们不使用插槽,因为最初不推荐它们,然后没有普遍采用的时间或建议。
问题前研究揭示了这个问题,但它看起来与durable functions. 另一个问题看起来更切题,但已经过时了,接受的答案表明Storage Account可以使用一个。
首先,官方文档有一个包含存储注意事项的页面,其中指出(支持ijabit指向它。):
多个功能应用程序可以毫无问题地共享同一存储帐户。例如,在 Visual Studio 中,您可以使用 Azure 存储模拟器开发多个应用程序。在这种情况下,模拟器的作用就像单个存储帐户。函数应用使用的同一存储帐户也可用于存储应用程序数据。然而,这种方法在生产环境中并不总是一个好主意。
不幸的是,它没有进一步详细说明最后一句话背后的基本原理。包含提及最佳实践的页面Azure Function:
为了提高生产性能,请为每个函数应用使用单独的存储帐户。对于持久函数和事件中心触发函数尤其如此。
令我更加困惑的是,此页面上有一个小节说“避免共享存储帐户”。但后来被删除了。
这个问题在某种程度上与问题表面相关,因为它提到了线程中的建议。
其次,我们就与此问题无关的不同问题联系了Azure支持,两位不同的支持工程师对当前问题分享了不同的意见。一位说我们可以在 Functions Apps 之间共享存储帐户,另一位说我们不应该。因此,支持者的建议好坏参半。
第三,我们要迁移到 v4,迁移说明中指出:
如果计算出的主机名相同,共享存储帐户的函数应用将无法启动。为每个函数应用使用单独的存储帐户。(#2049)
深入研究这个主题,唯一的问题是用于获取锁的函数主机名的冲突,即使在 2017 年 10 月,该函数主机名也是已知的。人们可以关注该线程,看看如何在 2020 年 1 …
如何在二头肌中输出资源id,在创建子网时我们如何获取输出字符串,虚拟网络语法如下所示
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2019-11-01' = {
name: vnetName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: 'subnetpoc-1'
properties: {
addressPrefix: '10.0.3.0/24'
}
}
{
name: 'subnetnetpoc-2'
properties: {
addressPrefix: '10.0.4.0/24'
}
}
]
}
}
// output subnet string = ""
Run Code Online (Sandbox Code Playgroud) azure azure-virtual-network azure-resource-manager azure-bicep
这是我在视图模型中的字段:
public decimal MyValue { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是我在视图中显示值的方式:
@Html.EditorFor(model => model.MyValue)
Run Code Online (Sandbox Code Playgroud)
我从DB一路调试,关掉所有JS。我仍然在 View 中得到该模型的值为 12.34345,但呈现给用户的最终值为 12.34。
这个问题是问如何解决这个问题,但为什么不清楚。
有趣的是,当我使用:
@Html.HiddenFor(model => model.MyValue)
Run Code Online (Sandbox Code Playgroud)
四舍五入没有发生。
(!) 问题无法在本地重现。
Azure 函数版本 ~4
节点版本 14.18.1
创建一个简单的 HTTP 触发的 Azure Function 并设置两个简单的属性,我们得到以下代码:
module.exports = async function (context, req) {
req.auth = {authField: 'some value'}
req.user = {userField: 'some value'}
context.log(`${JSON.stringify(req,null,2)}`);
context.res = {
body: 'responseMessage'
};
}
Run Code Online (Sandbox Code Playgroud)
记录器打印以下对象:
{
"method": "POST",
"url": "xxx",
"originalUrl": "xxx",
"headers": {
/// ...
},
"query": {},
"params": {},
"body": { "name": "Azure" },
"rawBody": "{\"name\":\"Azure\"}",
"auth": { "authField": "some value" }
}
Run Code Online (Sandbox Code Playgroud)
如您所见,只有authset 而不是 set user。在版本中可以看到相同的失败行为4.2.0。
当我使用 Azure …
现在,即使通过 KUDU 进行 zip 部署返回成功,我也再次面临在 Azure Function App 上使用旧代码的问题。
当然,我希望新代码在大约 30 分钟后加载,而不是立即加载。
该问题已标记为已关闭。
在这种情况下被认为是最佳实践:
有人知道为什么对 APIM 的 PUT 请求返回 404 \xe2\x80\x9cResource not found\xe2\x80\x9d 但其他操作类型返回 HTTP 200 吗?
\n我可以使用 APIM 中的测试功能来调用 PUT 操作端点,并且可以检查后端 Web 应用程序上的控制台输出并查看调用是否通过。但是,当使用 Postman 或前端 Web 应用程序时,我们会收到“资源未找到”错误消息。
\n我真的很困惑,因为正如前面提到的,其他动词也可以正常工作。我们从 Swagger 生成 API 端点定义,因此它与用于定义其他端点的方法完全相同。
\n邮递员输出:
\n{\n "statusCode": 404,\n "message": "Resource not found"\n}\nRun Code Online (Sandbox Code Playgroud)\n编辑:端点配置
\n{\n "openapi": "3.0.1",\n "info": {\n "title": "Foo",\n "description": "",\n "version": "1.0"\n },\n "servers": [{\n "url": "https://custom.domain.com"\n }],\n "paths": {\n "/api/v{version}/Tasks/{taskId}/Complete": {\n "put": {\n "tags": ["Tasks"],\n "summary": "/api/v{version}/Tasks/{taskId}/Complete - PUT",\n "operationId": "put-api-v-version-tasks-taskid-complete",\n "parameters": [{\n "name": "taskId",\n "in": …Run Code Online (Sandbox Code Playgroud) azure ×4
asp.net-mvc ×1
azure-bicep ×1
c# ×1
decimal ×1
kudu ×1
node.js ×1
razor ×1
rounding ×1