---
schema_version: "1"
id: 42c5acb87339378e98d96dd3824ac5a016ef1fe1d45073b64945f0d648a0c620
title: 外部服务连接疑难解答
collection: tableau
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/next/zh-cn/pro/desktop/r_connection_troubleshoot.md
canonical_url: https://help.tableau.com/v0.0/pro/desktop/zh-cn/r_connection_troubleshoot.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 4a6ecdb7966e4d66bb2c7f769b65893bbe475305e5aa3817e219a315a887d2b1
description: Troubleshoot analytics extension connections and SCRIPT function errors.
---
[跳转到主要内容](#main-content)

# 分析扩展程序连接疑难解答

本主题描述 Tableau 连接到外部分析扩展程序服务时可能会收到的错误。

注意：Tableau 技术支持人员无法协助编写、调整外部脚本或排除其问题。

## 与任何分析扩展程序通信时可能会发生的错误

<table class="table--plain"><colgroup><col class="Column-Column1" style="width: 50%;"><col class="Column-Column1" style="width: 50%;"></colgroup><tbody><tr class="Body-Body1"><td class="BodyE-Column1-Body1"><b>错误消息</b></td><td class="BodyD-Column1-Body1"><b>注释</b></td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">传递给 SCRIPT 函数的参数是不支持的类型。</td><td class="BodyD-Column1-Body2"><p>Tableau 只能将以下 Tableau 数据类型导出到 R：</p><ul><li><p>数字(小数)</p></li><li><p>数字(整数)</p></li><li><p>布尔值</p></li><li><p>字符串</p></li><li><p>日期</p></li><li><p>日期/时间</p></li></ul></td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">SCRIPT 函数返回了意外数量的结果。函数预期 %2 个值；返回了 %1 个值。</td><td class="BodyD-Column1-Body1">脚本结果必须是为所有行复制的长度为 1 的标量或矢量，或者长度等于 Tableau 结果表中的行数的矢量。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">证书文件对指定的连接 (%1%2:%3) 无效。检查是否为服务器和客户端使用了相同的证书、证书文件未损坏并且日期有效。</td><td class="BodyD-Column1-Body2">验证用于连接到外部服务的证书的编码和格式正确无误。您必须使用有效的 PEM 编码 x509 证书（扩展名为 .crt）进行连接。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">SCRIPT 函数返回的结果是意外类型。</td><td class="BodyD-Column1-Body1"><p>在收到无效数据类型时出现。Tableau 只能从 Rserve 服务器导入以下数据类型：</p><ul><li><p>RDouble</p></li><li><p>RInteger</p></li><li><p>RLogical</p></li><li><p>RCharacter</p></li></ul><p>对于 TabPy，Tableau 只能导入以下数据类型：</p><ul><li><p>浮点数列表</p></li><li><p>整数列表</p></li><li><p>布尔值列表</p></li><li><p>字符串列表</p></li></ul><p>如果结果为 null 或存在 Tableau 无法从外部服务器收集到说明的脚本执行错误，也会报告此错误。</p></td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">与外部服务通信时出错。</td><td class="BodyD-Column1-Body2">Tableau 在“try”外部函数内运行所有外部脚本。当“try”函数捕获计算错误时，会显示此错误以及外部服务生成的错误消息。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">此外部服务连接不支持身份验证。请尝试在不指定密码的情况下进行连接。</td><td class="BodyD-Column1-Body1">&nbsp;</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">身份验证失败。请提供有效的外部服务用户名和密码。</td><td class="BodyD-Column1-Body2">&nbsp;</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">外部服务中启用的身份验证类型不受支持。</td><td class="BodyD-Column1-Body1">禁用外部服务身份验证或更改为纯文本密码身份验证。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">未配置外部服务连接。请指定服务器名称并重试。</td><td class="BodyD-Column1-Body2">请参见<a href="https://help.tableau.com/v0.0/pro/desktop/zh-cn/r_connection_manage.htm" class="xref">使用分析扩展程序传递表达式</a>。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">计算“%1”包含一个需要内部服务连接的 SCRIPT_ 函数。请配置外部服务连接以启用自定义脚本。</td><td class="BodyD-Column1-Body1">请参见<a href="https://help.tableau.com/v0.0/pro/desktop/zh-cn/r_connection_manage.htm" class="xref">使用分析扩展程序传递表达式</a>。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">尝试发布的工作簿包含需要外部服务连接的 SCRIPT_ 函数。公共工作簿中不允许包含自定义脚本。</td><td class="BodyD-Column1-Body2">无法将包含外部服务脚本的公共工作簿发布到 Tableau Public。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">Tableau Public 不支持运行需要外部服务的自定义脚本。若要利用外部服务，请升级到 <span class="mc-variable Variables.TabsProductDesktop variable">Tableau Desktop</span> Professional Edition。</td><td class="BodyD-Column1-Body1">“Tableau Public”（在此错误中）是指 <span class="mc-variable Variables.TabsProductDesktop variable">Tableau Desktop</span> Public。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">Tableau Reader 不支持运行需要外部服务的自定义脚本。若要利用外部服务，请升级到 <span class="mc-variable Variables.TabsProductDesktop variable">Tableau Desktop</span> Professional Edition。</td><td class="BodyD-Column1-Body2">无法在 Tableau Reader 中查看包含外部服务脚本的工作簿。</td></tr></tbody></table>

## 只有 Rserve 服务器才可能会出现的错误

<table style="width: 100%;mc-table-style: url('Resources/TableStyles/Shaded-NoBorder.css');" class="TableStyle-Shaded-NoBorder" cellspacing="0"><colgroup><col class="Column-Column1" style="width: 25%;"><col class="Column-Column1" style="width: 75%;"></colgroup><tbody><tr class="Body-Body1"><td class="BodyE-Column1-Body1"><b>错误消息</b></td><td class="BodyD-Column1-Body1"><b>注释</b></td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">无法识别 Rserve 签名。</td><td class="BodyD-Column1-Body2">Rserve 标头签名必须为“Rsrv”。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">无法识别 Rserve 版本。</td><td class="BodyD-Column1-Body1">Rserve 标头版本必须为“0103”。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">无法识别 Rserve 协议。</td><td class="BodyD-Column1-Body2">Rserve 标头协议必须为“QAP1”。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">在连接到 R 时身份验证失败。</td><td class="BodyD-Column1-Body1">Tableau 尝试向 Rserve 进行身份验证但失败。请确认您输入了有效密码。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">参数/主体中的字节数不正确。</td><td class="BodyD-Column1-Body2">&nbsp;</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">Tableau 读取的数据长度不等于标头承诺的长度。</td><td class="BodyD-Column1-Body1">&nbsp;</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">无法识别响应类型。</td><td class="BodyD-Column1-Body2">读取结果时的传输协议类型不是预期的 SEXP。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">&lt;type&gt;vector 过长。</td><td class="BodyD-Column1-Body1">用于测量从或向 Rserve 发送的数据长度的数字过大，可能指示协议标头已损坏。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">Rserve 命令无效。</td><td class="BodyD-Column1-Body2">Tableau 可能错误地实施了 Rserve 协议。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">服务器的响应是错误 <code>&lt;&lt; (uint32_t)status &lt;&lt;</code> 。有关详细信息，请参见 Rsrv.h。</td><td class="BodyD-Column1-Body1">各种错误条件记录在 Rsrv.h 中的注释中。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">标头偏移过长。</td><td class="BodyD-Column1-Body2">这可能由于乱码标头与响应数据的偏移过大造成的。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">Rserve 套接字失败。</td><td class="BodyD-Column1-Body1">登录、脚本计算、读取挂起检查、结果读取或 Tableau 字段到 R 脚本参数赋值引发非标准异常。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">外部服务使用不受支持的身份验证类型。</td><td class="BodyD-Column1-Body2">若要同时支持通过启用 SSL 的方式和明文方式连接到 Rserve 实例，Rserve 服务器管理员必须将以下条目添加到 Rserve 服务器上的 Rserve 配置文件中：<p><code>plaintext enable</code></p></td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">RServe 上发生了加密系统错误。</td><td class="BodyD-Column1-Body1">RServe 的加密系统发生错误。有关详细信息，请检查 RServe 日志。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">RServe 由于安全违规而发起关闭命令。</td><td class="BodyD-Column1-Body2">RServe 由于安全违规而关闭了连接。有关详细信息，请检查 RServe 日志。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">为安全连接设置了“外部服务配置”，但缺少证书。</td><td class="BodyD-Column1-Body1">建立与外部服务的安全连接时，需要上载您希望用于对此外部服务签名的证书。与未使用此证书签署的服务器的连接将被拒绝。这可确保仅将数据发送到受信任的服务器。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">证书文件对指定的连接 (%1%2:%3) 无效。检查是否为服务器和客户端使用了相同的证书、证书文件未损坏并且日期有效</td><td class="BodyD-Column1-Body2">提供的证书对于此连接配置无效。检查以确定它是否与用于签署外部服务服务器的证书匹配、它是否为 PEM 编码，并且对于当天的日期有效。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">外部服务连接证书无效</td><td class="BodyD-Column1-Body1">提供的证书无效。检查以确定证书是否为 PEM 编码，并且它对于当天的日期有效。</td></tr><tr class="Body-Body2"><td class="BodyE-Column1-Body2">外部服务连接未能创建 SSL/TLS 上下文</td><td class="BodyD-Column1-Body2">Tableau 未能为此给定外部服务配置初始化安全环境。检查以确定主机和端口是否正确，并且证书有效。</td></tr><tr class="Body-Body1"><td class="BodyE-Column1-Body1">外部服务未能与 SSL/TLS 连接</td><td class="BodyD-Column1-Body1">Tableau 未能建立与外部服务的安全连接。验证外部服务是否配置为支持安全连接，并且提供的证书是否与用于签署外部服务的证书匹配。</td></tr><tr class="Body-Body2"><td class="BodyB-Column1-Body2">无法识别外部服务服务器协议</td><td class="BodyA-Column1-Body2">主机前面附带了 Tableau 无法识别或不支持的协议。如果连接到 RServe，则不需要任何协议。如果连接到 TabPy，则在建立明文连接时需要 HTTP 协议，在建立安全连接时需要 HTTPS 协议。</td></tr></tbody></table>

## 其他问题

### SCRIPT 函数甚至在计算结果为 false 的逻辑语句中运行

将表达式发送给运行的外部服务实例的函数将会执行，即使它位于本该阻止它执行的逻辑语句中也是如此。IF、IIF 和 CASE 之类的逻辑函数就是如此。例如：

IF 1==0 THEN
  \[\[R script code\]\]
ELSE
  "1 does not equal 0"
END