带有逃逸变量的BizTalk WCF-WebHttp URI映射问题

时间:2019-05-12 21:16:40

标签: biztalk webhttp

我正在尝试使用BizTak WCF-WebHttp适配器通过变量映射发送到Service Desk Plus CMDB API。

尝试使用浏览器时,它可以正常工作。 Service Desk Plus CMDB API需要类似URI(为了可读性而严格缩短):

http://host.com/api/cmdb/ci?OPERATION_NAME=read&TECHNICIAN_KEY=Mykey&format=XML&INPUT_DATA=<?xml version='1.0'?>
<API>
    <name>email@host.com</name>
</API>

我已经使用了URI http://host.com/api/cmdb/ci和URL映射。

<BtsHttpUrlMapping>
    <Operation Url="?OPERATION_NAME=read&amp;TECHNICIAN_KEY=MyKey&amp;format=XML&amp;INPUT_DATA=&lt;?xml version=&apos;1.0&apos;?&gt;
        &lt;API&gt;
            &lt;name&gt;email@host.com&lt;/name&gt;
        &lt;/API&gt;"/>  
</BtsHttpUrlMapping>

这很好,但是我需要一种更动态的方法。我尝试使用变量映射,所以用一个变量替换了硬编码的电子邮件地址。

<BtsHttpUrlMapping>
    <Operation Url="?OPERATION_NAME=read&amp;TECHNICIAN_KEY=MyKey&amp;format=XML&amp;INPUT_DATA=&lt;?xml version=&apos;1.0&apos;?&gt;
        &lt;API&gt;
            &lt;name&gt;{email}&lt;/name&gt;
        &lt;/API&gt;"/>  
</BtsHttpUrlMapping>

尝试使用变量保存URL映射时出现错误。

WCF-WebHttp传输属性

保存属性时出错。 (System.InvalidOperationException)UriTemplate

?OPERATION_NAME=read&TECHNICIAN_KEY=MyKey&format=XML&INPUT_DATA=<?xml version='1.0'?><API><name>{email}</name></API>

无效;当value不能为复合段时,查询字符串的每一部分都必须采用“名称=值”的形式。有关更多详细信息,请参见UriTemplate文档。

如果我尝试不在转义的XML字符串之内的变量(如键),那么它将正常工作。

<BtsHttpUrlMapping>
    <Operation Url="?OPERATION_NAME=read&amp;TECHNICIAN_KEY={key}&amp;format=XML&amp;INPUT_DATA=&lt;?xml version=&apos;1.0&apos;?&gt;
        &lt;API&gt;
            &lt;value&gt;email@host.com&lt;/value&gt;
        &lt;/API&gt;"/>  
</BtsHttpUrlMapping>

我的意图是能够在转义的XML字符串中使用变量。如果不可能的话;我将不得不使用动态适配器,并在业务流程中创建URI和URL映射。

1 个答案:

答案 0 :(得分:0)

您是否理解为什么说查询字符串的每个部分都必须采用'name = value 的形式?只有几种方法可以使UriTemplates工作。

查看UriTemplate的工作原理here。这是一个有效的示例:

  • 天气/ {州} / {城市}?forecast = {天}

因此,在您的情况下,应将 INPUT_DATA = 之后的所有内容设为变量。这意味着您正在讨论的整个转义XML字符串。