我刚接触Azure功能,我刚刚浏览了TimerTrigger for Sql Connection和BlobTrigger for Azure Blob。我厌倦了演示工作正常。 接下来我尝试将两者结合起来。
在特定Blob容器中上传/添加文件时,我应该在Azure SQL数据库表中写入blob名称。
我如何在单一Azure功能中实现这一目标?
我还怀疑如果我们为 blob触发器创建一个azure函数,那么这个函数将始终在后台运行吗?我的意思是它将消耗后台运行成本?
我认为blob触发器的azure功能只会消耗成本 在它的运行期间。不是吗?
有人可以帮助我吗
答案 0 :(得分:1)
我如何在单一Azure功能中实现这一目标?
你可以使用blob触发器实现它。您将从函数参数[name]中获取blob名称。然后,您可以将此值保存到Azure SQL数据库。以下示例代码供您参考。
public static void Run(Stream myBlob, string name, TraceWriter log)
{
var str = "connection string of your sql server";
using (SqlConnection conn = new SqlConnection(str))
{
conn.Open();
var text = "insert into mytable(id, blobname) values(@id, @blobname)";
using (SqlCommand cmd = new SqlCommand(text, conn))
{
cmd.Parameters.AddWithValue("id", 1);
cmd.Parameters.AddWithValue("blobname", name);
// Execute the command and log the # rows affected.
var rows = cmd.ExecuteNonQuery();
log.Info($"{rows} rows were updated");
}
}
}
我认为blob触发器的azure函数只会在运行期间消耗成本。不是吗?
创建Azure功能时,您需要选择主机方案。
如果您选择应用服务计划,则需要支付应用服务计划,具体取决于您选择的等级。如果您选择消费计划,您的功能将根据两件事进行结算。资源消耗和执行。
资源消耗的计算方法是将平均内存大小(以GB为单位)乘以执行该函数所用的时间(以秒为单位)。您需要为功能消耗的CPU和内存付费。执行意味着请求计数由您的函数处理。请注意,消费计划定价还包括每月100万次请求的免费赠款和每月400,000 GB的资源消耗。
我们也可以在Insert命令的位置调用Sp(比如Exec spname)吗?对吗?
是的,我们可以通过将CommandType设置为StoredProcedure来调用sp。以下代码供您参考。
using (SqlCommand cmd = new SqlCommand("StoredProcedure Name", conn))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
}
答案 1 :(得分:0)
当然,您应该为您的场景使用Blob Trigger。
如果您使用消费计划,则只会根据事件执行情况进行更改。不适用背景费用。