BizTalk 2013 R2如何通过WCF-WebHttp发布带参数的REST API?
老哥,我刚好之前折腾过BizTalk 2013 R2的REST发布,你的问题我太熟了,咱们一步步来解决:
1. 把接收位置改成你要的URL格式
你现在的接收位置是/serviceapi/Service1.svc,这是默认的WCF服务路径,要改成你预期的带参数的路径,得这么操作:
- 打开BizTalk管理控制台,找到你的接收端口对应的WCF-WebHttp接收位置
- 右键点属性→配置,切到WebHttp标签页
- 在相对地址里直接填:
rest/testlink/write/data/apiservice/V01/rs/call/search/{name}/{rows}/{starts} - 注意别加开头的斜杠,因为IIS的虚拟路径已经帮你处理了基础部分
- 在相对地址里直接填:
- 再切到端点行为标签,勾选启用WebHttp行为,把自动帮助页面设为True——这个后面给客户端看参数超有用
2. 把参数和BizTalk变量映射好
你已经用了btsvariable,那咱们把路径参数和查询参数的映射补全:
必选路径参数(name、rows、starts)
- 回到配置窗口的消息映射标签,点添加:
- 第一个参数选路径参数,名称填
name(必须和相对地址里的{name}完全一致,大小写敏感),然后选你已经定义好的对应BizTalk变量(比如bts_name) - 同理给
rows和starts做映射,确保变量名和你之前的映射逻辑匹配
- 第一个参数选路径参数,名称填
- 这里要注意:路径参数是必选的,所以不要勾选允许空值,这样BizTalk会自动拦截缺少参数的请求
可选查询参数(year、AdditionalName)
- 同样在消息映射里添加:
- 选查询字符串参数,名称填
year,对应你的BizTalk变量,勾选允许空值(因为是可选的) - 再给
AdditionalName做同样配置,参数名要和URL里的完全一致(比如URL里是AdditionalName,这里就不能写成additionalname)
- 选查询字符串参数,名称填
- 查询参数不用在相对地址里写,WCF-WebHttp会自动解析URL里
?后面的键值对
3. 让客户端清楚怎么传参数
有两个简单的办法让客户端知道参数要求:
- 自动帮助页面:刚才开了自动帮助页面之后,客户端访问
https://localhost/rest/testlink/write/data/apiservice/V01/rs/call/search/help(就是你的API路径加个/help),这个页面会自动列出所有操作、必填/可选参数、参数类型,甚至还有示例请求,非常直观 - 如果需要更正式的文档,你可以把帮助页面的内容整理成Markdown或者HTML,要是追求Swagger的话,BizTalk 2013 R2本身不原生支持,但可以用第三方工具或者写点自定义代码生成,不过自动帮助页面足够应付大部分场景了
4. 测试踩坑指南
配置完之后用SOAP UI或者Postman测一下:
- 用你给的示例URL:
https://localhost/rest/testlink/write/data/apiservice/V01/rs/call/search/brown/99/true?year=2007,2008,2009&AdditionalName=true - 确保请求方法(GET/POST等)和你接收位置配置的一致(在WebHttp标签页的HTTP方法里设置,比如如果是查询数据就用GET)
- 要是还调用失败,检查这几点:
- IIS的虚拟路径是不是和BizTalk接收位置绑定的站点对应,别搞混了站点
- 路径参数的类型对不对,比如
rows是数字,你的BizTalk变量得能接收数字类型,别用字符串变量接数字 - 查询参数的大小写是不是和配置的一致,URL里的参数名要和消息映射里的完全匹配
内容的提问来源于stack exchange,提问作者sivaraman vasu
相关产品推荐
相关产品推荐

