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 ...
随机推荐
- 函数中的static静态变量
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果. <?php function testStatic($start,$end){ st ...
- CPU指令集
cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. C ...
- 【海洋女神原创】知识普及:IS版本命名规则和高低关系
经常有朋友对IS的版本命名不甚了解,有时候在交流的时候就会造成误会,在这里做一下普及. IS最早出名的版本是IS6.22,这是个非常古老的版本的,但是在IS历史上有不可磨灭的贡献. 之后很长一段时间内 ...
- OpenGL阴影,Shadow Mapping(附源程序)
实验平台:Win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): 本文描述图形学的两个最常用的阴影技术之一,Shadow Mapping方法(另一种是Sh ...
- 如何通过 js 修改微信浏览器的title?
document.setTitle = function(t) { document.title = t; var i = document.createElement('iframe'); i.sr ...
- 关于Kean博客的学习
由于我从事设计行业,使用Autocad进行绘图是一件单调但是拥有乐趣的工作. 大约在一年前,接触到了CAD的二次开发的内容,它使我感到新奇,并且决定花时间来研究相关的知识.这时我在网上浏览到了Kean ...
- C++ 一些笔记
1.指针.引用和const ; int &a = i; int *p ; int *&r=p;//r是对指针的引用 r=&i;//实质上是将p指向i *r=;//实质上是将i的 ...
- xmind的第十一天笔记
- Linux CentOs7 下安装 redis
Linux CentOs7 下安装 redis 请将以下命令放入linux命令行中运行 如果安装过程前没有安装GCC请先安装 命令如下 $ yum install gcc-c++ $ wget ht ...
- HttpClient封装工具类
import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.List; ...