最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk调用OTM的web services。

OTM的云服务,仅支持WS-Security的Username Token验证方式。

所以需要使用UsernameToken Web Service Security Policy,并使用HTTPS加密此SOAP消息的传输。

  OTM发布的web services是基于java的,也就是说这也是个biztalk调用的java开发的基于WS-Security的web services的例子。

https的请求内容格式如下:

POST https://URL HTTP/1.1

Content-Type: text/xml; charset=utf-8

SOAPAction: "process"

Host: host

Content-Length:

Expect: 100-continue

Accept-Encoding: gzip, deflate

Connection: Keep-Alive

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

<env:Header>

<ns1:Security>

<ns1:UsernameToken>

<ns1:Username>GUEST.ADMIN</ns1:Username>

<ns1:Password>CHANGEME</ns1:Password>

</ns1:UsernameToken>

</ns1:Security>

</env:Header>

<env:Body>

...your message content goes here...

</env:Body>

</env:Envelope>

  1. 引用OTM的web services

在VS的BizTalk project中使用ADDàAdd Generated Items… à Consume WCF Service:

引用OTM的web services提供的wsdl URL:

WSDL包括相应的xsd文件能够获取到,点击下一步就会出错:

试过N多次,在这一步死活就是过不去,引用不成功,只能理解为双方兼容性问题。

引用在线的wsdl不成功,就试试引用wsdl文件。使用svcutil.exe工具根据web

Services提供的wsdl的URL生成wsdl和相应的xsd文件:

可以看到生成了两个文件:xmlns.oracle.com.apps.otm.IntXmlService.wsdl和xmlns.oracle.com.apps.otm.xsd,这就是biztalk引用文件wsdl的原料了。

再在VS的BizTalk project中使用ADDàAdd Generated Items… à Consume WCF Service,这次选Metadata File:

下一步:

选择前面生成的两个文件,一个wsdl文件,一个xsd文件。结果还是出错:

把wsdl文件和xsd合并成一个文件再试。

查看wsdl文件如下:

把xmlns.oracle.com.apps.otm.xsd的内容整个的替换掉红框内的内容,把两个文件合并为一个wsdl文件,在bizitalk project再次引用成功,生成三个文件:

  1. 部署BizTalk项目测试

部署这个BizTalk项目后,在biztalk application中导入端口的绑定文件:IntXmlService.BindingInfo.xml,可以看到这是一个WCF-Custom发送端口:

点击这个端口的"Configure…":

Bingding标签的内容:

设置好对方提供的用户名和密码:

设置一个接收端口从一个文件夹接收测试文件,这个发送端口设置Filter订阅这个接收端口,然后再设置一个发送端口订阅这个发送端口返回的消息写到一个文件夹,这个具体过程就不详细描述了。

开始测试,将一个从xsd schema生成的消息实例发送给对方,使用Fiddler截取发送和返回的消息看。

截取到的发送出去的消息是这样的:

截取到的返回的消息是这样的:

很明显,对方返回的消息说安全验证错误。

查看发送出去的消息里面,发现在Envelope里没有Header,就没有把Username Token发送给对方。

仔细检查WCF-Custom发送端口的配置,发现缺少Security的配置。

在发送端口的Binding标签中增加Security Extension:

把security移到最上面的位置,然后设置authenticationMode为UserNameOverTransport,把enableUnsecuredResponse设置为True。

再测试,使用Fiddler截取发送和返回的消息看。

截取到的发送出去的消息是这样的:

可以看到,Envelope中的Header有了,UsernameToken也有了。

截取到的返回的消息是这样的:

可以看到,这个就是对方的正常回应消息了。

BizTalk调用WS-Security的web services的更多相关文章

  1. Java与.NET 的Web Services相互调用

    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...

  2. Delphi 6 Web Services初步评估

    Delphi 6 Web Services初步评估这是我刚到现在公司的时候(2001年8月份)所作的一份测试报告,现公布出来,希望能对大家有所帮助.因为当时d6刚刚发行,Web Service方面还存 ...

  3. Delphi 6 Web Services初步评估之三(转)

    Delphi 6 Web Services初步评估之三(转)   Delphi 6 Web Services初步评估之三(转)★ 测试总体印象:在整个测试中,对Delphi 6创建的Web Servi ...

  4. BizTalk发布WS-Security的web services

    最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk发布WS-Securit ...

  5. asp调用.net xml web services

    来源:http://www.cnblogs.com/notus/archive/2006/08/10/473000.html#2662503 (是不是实际上可以用这个办法调用任何xml web ser ...

  6. 使用LoadRunner对Web Services进行调用--Import Soap

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  7. 使用LoadRunner对Web Services进行调用--Add Service Call

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  8. PHP 调用asp.net Web Services服务问题总结

    原文:PHP 调用asp.net Web Services服务问题总结 PHP是弱类型语言,转换非常不方便. < ?php //soap 客户端 $client=new SoapClient(' ...

  9. oracle直接调用web services

    oracle调用C#开发web services 1,  去oracle官网上下载dbws-callout-utility-10131.zip 地址:https://oracle-base.com/a ...

随机推荐

  1. HTML5日期输入类型(date)

    在很多页面和web应用中都有输入日期和时间的地方,最典型的是订飞机票,火车票,酒店,批萨等网站. 在HTML5之前,对于这样的页面需求,最常见的方案是用Javascript日期选择组件.这几乎是无可争 ...

  2. 关于Windows7的安装纠结过程

    关于Windows7的安装过程 背景交代 因为自己有两个笔记本,一个是伴我读过四年大学生活的老华硕笔记本,一个是姐夫不用的上网本.自己的构想是将老笔记本装上Ubuntu Server当作平时开发pyt ...

  3. Installshield调用DLL的正确姿势

    脚本如下 szDllPath = SUPPORTDIR ^ "TestCom.dll";       set oMyTest = CoCreateObjectDotNet(szDl ...

  4. 【 D3.js 进阶系列 — 6.1 】 缩放的应用(Zoom)

    缩放(Zoom)是另一种重要的可视化操作,主要是使用鼠标的滚轮进行. 1. zoom 的定义 缩放是由 d3.behavior.zoom() 定义的. var zoom = d3.behavior.z ...

  5. ORACLE 各种连接

    数据说明: select * from dave;ID NAME 安庆 dave bl bl dave dba sf-express dmm select * from b1;ID NAME dave ...

  6. 利用BeanUtils在对象间复制属性

    commons-beanutils是jakarta commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很 ...

  7. 出现( linker command failed with exit code 1)错误总结 (转)

    这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. ...

  8. 使用canvas元素-art方法绘制圆弧

    最近在学习HTML5,发现canvas真的很棒,canvas元素是一种可供绘图的平面,我们用JavaScript对它进行配置和操作.我这里说一下arc方法绘制圆弧,顺便提一下涉及到的基础知识. 首先看 ...

  9. Adobe After Effects工程使用aep格式来存储

    写页面的时候发现好几处的按钮都是这种样式,于是把这个按钮的样式单独提取出来放着全局css文件中 .base-btn { display: block; width: 90%; height: 54px ...

  10. bzoj 3531 旅行

    动态开点线段树+树链剖分  对于每一种宗教信仰都开一颗线段树 空间: QlogN 即每一次修改都只会改变logN 个点 时间 O(QlogN)  naive题  边没有开两倍  QAQ bzoj 35 ...