Compartilhar via

Azure Data Factory和Azure Synapse Analytics中的 Web 活动

适用于: Azure Data Factory Azure Synapse Analytics

Web 活动可用于从Azure Data Factory或 Synapse 管道调用自定义 REST 终结点。 可以传递数据集和链接服务以供活动使用和访问。

注意事项

Web 活动支持使用自托管集成运行时调用托管在专用虚拟网络中的 URL。 该集成运行时应可以看到 URL 终结点。

注意事项

支持的最大输出响应负载大小为 4 MB。

使用 UI 创建 Web 活动

若要在管道中使用 Web 活动,请完成以下步骤:

  1. 在管道“活动”窗格中搜索“Web”,然后将 Web 活动拖动到管道画布上。

  2. 选择画布上的新 Web 活动(如果尚未选择)及其 “设置 ”选项卡以编辑其详细信息。

    显示 Web 活动的 UI。

  3. 指定一个 URL,它可以是文本 URL 字符串,也可以是动态表达式、函数系统变量其他活动的输出的任意组合。 提供要与请求一起提交的其他详细信息。

  4. 将活动的输出用作任何其它活动的输入,并在目标活动中支持动态内容的任何位置引用输出。

语法

{
   "name":"MyWebActivity",
   "type":"WebActivity",
   "typeProperties":{
      "method":"Post",
      "url":"<URLEndpoint>",
      "httpRequestTimeout": "00:01:00"
      "connectVia": {
          "referenceName": "<integrationRuntimeName>",
          "type": "IntegrationRuntimeReference"
      }
      "headers":{
         "Content-Type":"application/json"
      },
      "authentication":{
         "type":"ClientCertificate",
         "pfx":"****",
         "password":"****"
      },
      "datasets":[
         {
            "referenceName":"<ConsumedDatasetName>",
            "type":"DatasetReference",
            "parameters":{
               ...
            }
         }
      ],
      "linkedServices":[
         {
            "referenceName":"<ConsumedLinkedServiceName>",
            "type":"LinkedServiceReference"
         }
      ]
   }
}

类型属性

属性 说明 允许的值 必需
名称 Web 活动的名称 字符串
类型 必须设置为 WebActivity 字符串
方法 目标终结点的 REST API 方法。 字符串。

支持的类型:“GET”、“POST”、“PUT”、“PATCH”、“DELETE”
url 目标终结点和路径 字符串(或带有 "resultType" 字符串的表达式)。 如果活动未收到来自终结点的响应,活动将在 1 分钟内超时,并出现错误。 可以通过更新 httpRequestTimeout 属性来将此响应超时增加最多 10 分钟
HTTP 请求超时 (httpRequestTimeout) 响应超时时间 hh:mm:ss,其最大值为 00:10:00。 如果未显式指定,则默认值为 00:01:00
headers 发送到请求的标头。 例如,要在请求中设置语言和类型:"headers" : { "Accept-Language": "en-us", "Content-Type": "application/json" } 字符串(或带有 resultType 字符串的表达式)
body 表示要发送到终结点的有效负载。 字符串(或带有 "resultType" 字符串的表达式)。

请参阅请求有效负载架构部分中的请求有效负载架构。
对于 POST/PUT/PATCH 方法是必需的。 对于 DELETE 方法是可选项。
身份验证 用于调用该终结点的身份验证方法。 支持的类型是“基本、客户端证书、系统分配的托管标识、用户分配的托管标识、服务主体”。有关详细信息,请参阅身份验证部分。 如果不需要身份验证,请排除此属性。 字符串(或带有 resultType 字符串的表达式)
turnOffAsync 选项,可用于禁用在 HTTP 202 响应的响应头中对位置字段执行 HTTP GET。 如果设置为 true,它将停止对响应头中给定的 http 位置调用 HTTP GET。 如果设置为 false,它将继续对 http 响应头中给定的位置调用 HTTP GET。 允许的值为 false(默认)和 true 。
disableCertValidation(禁用证书验证) 删除服务器端证书验证(不建议这样做,除非您连接到不使用标准 CA 证书的受信任服务器)。 允许的值为 false(默认)和 true 。
数据集 传递给终结点的数据集列表。 数据集引用数组。 可以是空数组。
linkedServices 传递给终结点的链接服务列表。 关联的服务引用数组。 可以是空数组。
connectVia 用于连接到数据存储的集成运行时。 可以使用Azure集成运行时或自承载集成运行时(如果数据存储位于专用网络中)。 如果未指定此属性,服务将使用默认Azure集成运行时。 集成运行时引用。

注意事项

Web 活动调用的 REST 终结点必须返回 JSON 类型的响应。 如果活动未收到来自终结点的响应,活动将在 1 分钟内超时,并出现错误。 ** 对于支持 异步请求-回复模式的终结点,Web 活动会继续等待,而不会超时(最多等待 7 天),或者直到终结点发出完成作业的信号为止。

下表显示了 JSON 上下文的要求:

值类型 请求正文 响应正文
JSON 对象 支持 支持
JSON 数组 已支持
(目前,JSON 数组由于 bug 而不起作用。修复正在进行中。
不支持
JSON 值 支持 不支持
非 JSON 类型 不支持 不支持

身份验证

下面是 Web 活动中支持的身份验证类型。

如果不需要身份验证,请不要包含“authentication”属性。

基本

指定用户名和密码以用于基本身份验证。

"authentication":{
   "type":"Basic",
   "username":"****",
   "password":"****"
}

客户端证书

指定 base64 编码的 PFX 文件内容和密码。

"authentication":{
   "type":"ClientCertificate",
   "pfx":"****",
   "password":"****"
}

证书需要是 x509 证书。 若要转换为 PFX 文件,可以使用你喜欢的实用工具。 对于 base-64 编码,可以使用以下 PowerShell 代码片段。

$fileContentBytes = get-content 'enr.dev.webactivity.pfx' -AsByteStream

[System.Convert]::ToBase64String($fileContentBytes) | Out-File 'pfx-encoded-bytes.txt'

托管身份

使用数据工厂或 Synapse 工作区实例的托管标识来指定要请求访问令牌的资源 URI。 若要调用Azure资源管理 API,请使用 https://management.chinacloudapi.cn/。 有关托管标识的工作原理的详细信息,请参阅 Azure 资源概述页的 托管标识页

"authentication": {
	"type": "MSI",
	"resource": "https://management.chinacloudapi.cn/"
}

服务主体

指定租户 ID、服务主体 ID 和服务主体密钥,并使用安全字符串作为客户端机密。

"authentication": {
            "type": "ServicePrincipal",
            "tenant": "your_tenant_id",
            "servicePrincipalId": "your_client_id",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "your_client_secret"
            },
            "resource": "https://management.chinacloudapi.cn/"
}

请求负载模式

当使用 POST/PUT 方法时,正文属性表示发送到终结点的有效负载。 可以将链接服务和数据集作为有效负载的一部分进行传递。 下面是有效负载的架构:

{
    "body": {
        "myMessage": "Sample",
        "datasets": [{
            "name": "MyDataset1",
            "properties": {
                ...
            }
        }],
        "linkedServices": [{
            "name": "MyStorageLinkedService1",
            "properties": {
                ...
            }
        }]
    }
}

示例

在此示例中,管道中的 Web 活动调用了 REST 终结点。 它将Azure SQL链接服务和Azure SQL数据集传递给终结点。 REST 终结点使用 Azure SQL 连接字符串连接到逻辑 SQL 服务器,并返回 SQL 服务器实例的名称。

管道定义

{
    "name": "<MyWebActivityPipeline>",
    "properties": {
        "activities": [
            {
                "name": "<MyWebActivity>",
                "type": "WebActivity",
                "typeProperties": {
                    "method": "Post",
                    "url": "@pipeline().parameters.url",
                    "headers": {
                        "Content-Type": "application/json"
                    },
                    "authentication": {
                        "type": "ClientCertificate",
                        "pfx": "*****",
                        "password": "*****"
                    },
                    "datasets": [
                        {
                            "referenceName": "MySQLDataset",
                            "type": "DatasetReference",
                            "parameters": {
                                "SqlTableName": "@pipeline().parameters.sqlTableName"
                            }
                        }
                    ],
                    "linkedServices": [
                        {
                            "referenceName": "SqlLinkedService",
                            "type": "LinkedServiceReference"
                        }
                    ]
                }
            }
        ],
        "parameters": {
            "sqlTableName": {
                "type": "String"
            },
            "url": {
                "type": "String"
            }
        }
    }
}

管道参数值

{
    "sqlTableName": "department",
    "url": "https://adftes.chinacloudsites.cn/api/execute/running"
}

Web 服务终结点代码


[HttpPost]
public HttpResponseMessage Execute(JObject payload)
{
    Trace.TraceInformation("Start Execute");

    JObject result = new JObject();
    result.Add("status", "complete");

    JArray datasets = payload.GetValue("datasets") as JArray;
    result.Add("sinktable", datasets[0]["properties"]["typeProperties"]["tableName"].ToString());

    JArray linkedServices = payload.GetValue("linkedServices") as JArray;
    string connString = linkedServices[0]["properties"]["typeProperties"]["connectionString"].ToString();

    System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(connString);

    result.Add("sinkServer", sqlConn.DataSource);

    Trace.TraceInformation("Stop Execute");

    return this.Request.CreateResponse(HttpStatusCode.OK, result);
}

参阅支持的其他控制流活动: