BizTalk调用WS-Security的web services
最近做个项目,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>
引用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再次引用成功,生成三个文件:

部署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的更多相关文章
- Java与.NET 的Web Services相互调用
一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...
- Delphi 6 Web Services初步评估
Delphi 6 Web Services初步评估这是我刚到现在公司的时候(2001年8月份)所作的一份测试报告,现公布出来,希望能对大家有所帮助.因为当时d6刚刚发行,Web Service方面还存 ...
- Delphi 6 Web Services初步评估之三(转)
Delphi 6 Web Services初步评估之三(转) Delphi 6 Web Services初步评估之三(转)★ 测试总体印象:在整个测试中,对Delphi 6创建的Web Servi ...
- BizTalk发布WS-Security的web services
最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk发布WS-Securit ...
- asp调用.net xml web services
来源:http://www.cnblogs.com/notus/archive/2006/08/10/473000.html#2662503 (是不是实际上可以用这个办法调用任何xml web ser ...
- 使用LoadRunner对Web Services进行调用--Import Soap
利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...
- 使用LoadRunner对Web Services进行调用--Add Service Call
利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...
- PHP 调用asp.net Web Services服务问题总结
原文:PHP 调用asp.net Web Services服务问题总结 PHP是弱类型语言,转换非常不方便. < ?php //soap 客户端 $client=new SoapClient(' ...
- oracle直接调用web services
oracle调用C#开发web services 1, 去oracle官网上下载dbws-callout-utility-10131.zip 地址:https://oracle-base.com/a ...
随机推荐
- mov和ldr/str的区别
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就 ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- python数据结构
. 数据结构¶ .1. 深入列表¶ 链表类型有很多方法,这里是链表类型的所有方法: list.append(x) 把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] . list ...
- drozer安装之夜深模拟器
首先下载drozer的安装包 可以直接到官网下载:https://labs.mwrinfosecurity.com/tools/drozer/ 安装 解压压缩包其中 setup.exe 为Win ...
- js点击空白处弹窗消失
$(document).mousedown(function(e){ var _list = $('#pop'); if(!_list.is(e.target) && _list.ha ...
- C#编程语言与面向对象——抽象基类与接口
在一个类前加“abstract”关键字,此类就成为抽象类. 对应的,在一个方法前加“abstract”关键字,此方法就成为抽象方法. abstract class Fruit //抽象类 { publ ...
- Java笔记8-抽象接口
高级特性部分: 抽象(abstract) 接口(interface) 提纲: 抽象类的定义和使用 模板设计模式的使用 接口的定义和使用 回调函数 区别抽象类和接口的异同 软件设计原则--------- ...
- C#使用quartz.net定时问题
因工作需要需要完成定时查询数据..因此在了解之后完成了一个demo 所需要的dll在该地址下载 http://pan.baidu.com/s/1sjNQLXV 首先引入quartz这个dll... 在 ...
- eclipse中安装Open Explorer
刚刚解压的eclipse中一般没有下面如图所示的这个操作,不能快速进入所选中的文件在Windows资源管理器所在的目录 我们需要下载OpenExplorer.jar包,放到eclipse解压后的dro ...
- 手把手教你配置UltraEdit对Oracle的PLSQL着色
http://hi.baidu.com/kingbridge/blog/item/94e225ad5fad4b194b36d60d.html UltraEdit-32 12.1版本配置默认文件显示 ...