最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk发布WS-Security的web services,使用WS-Security的Username Token验证方式。

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

这样的web services是可以跟被java客户端调用的。

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. 新建用于发布web servicdes的schema

为测试目的,新建一个简单的用于发布为web servicdes的schema:

  1. 新建一个简单的接收请求返回结果的orchestration

为测试目的,新建一个简单的接收前面新建的schema的request,简单映射为response的消息直接返回:

  1. 将orchestration的接收端口发布为WCF

部署这个BizTalk project,然后使用BizTalk WCF Services Publishing Wizard把orchestration的接收端口发布为WCF。

要发布使用WS-Security的web servicdes必须使用WCF-CustomIsolate的Transport type,下一步:

选择"Publish BizTalk orchestration as WCF Service",下一步:

选择前面建立的BizTalk project的dll,下一步:

这里显示了选择的dll中包含的orchestration和orchestration包含的可以发布为WCF的接收端口,下一步:

设置发布的WCF的Target namespace,下一步:

这是指定要发布到IIS的路径,同时选择"Allow anonymous access to WCF servicde",允许IIS中匿名访问web services,因为用户的身份验证是在消息内的。

发布完成后,在BizTalk的Application中会生成一个WCF-CustomIsolate的接收端口:

  1. 设置WCF-CustomIsolate接收位置的Application Pools

发布的WCF-CustomIsolate的接收位置在IIS中生成的Application的Application Pool默认使用DefaultAppPool,这个Application Pool的Identity是Windows內建的ApplicationPoolIdentity账号,不具有访问BizTalk数据库的权限,所以需要将Application Pool改为具有访问BizTalk数据库的权限Identity的Application Pool。

否则访问发布的WCF会出现这样的提示:

  1. 设置WCF-CustomIsolate接收位置的配置

查看WCF-CustomIsolate的属性:

点击"Configure…":

修改这里的Binding。

  1. 增加security Extension

增加security Extension,并把它移动到最顶层的位置,并把authenticationMode设置为UserNameOverTransport:

  1. 设置textMessageEncoding Extension

将textMessageEncoding的messageVersion设置为"Soap11":

  1. 将httpTransport改为httpsTransport

删除httpTransport Extension,增加httpsTransport,因为需要使用TLS进行消息的加密传输:

  1. 增加ServicesBehavior

在Behavior标签下,增加serviceCredentials的serviceBehaviors:

确认在UserNameAuthentication下的userNamePasswordValidationMode设置为Windows,表示验证客户端的UsernameToken将使用Windows的用户验证,即客户端的UsernameToken将跟windows的用户进行比对,如果windows的用户有跟客户端的UsernameToken匹配的即验证成功。

  1. 测试发布的WCF

可以新建一个简单的c# console应用作为客户端调用发布的WCF,然后用Fiddler抓取通讯的数据格式,判断发布的WCF是否符合WS-Security。

在c# console应用中引用前面发布的WCF:

具体调用WCF的代码如下:

其中的chnking是windows的用户,Jjz123356是这个windows用户的密码。

执行这段代码执行调用WCF的过程,使用Fiddler抓取数据查看请求消息格式为:

可以看到这个请求调用web services的消息格式完全符合WS-Security的格式。

再看,返回的消息格式:

可以看到,服务端返回的正常的结果。

BizTalk发布WS-Security的web services的更多相关文章

  1. Web Services

    Web Services 1.       Web Services基本规范概述 1.1.   什么是Web Services Web Services是为实现“基于Web无缝集成”的目标而提出的全新 ...

  2. Web Services的学习一

    1.Web Services可以将应用程序转换成为网络应用程序,也就是说可以通过Web Services,应用程序可以向全世界发布信息,或者提供功能. 而且通过Web Services发布的,可以被其 ...

  3. BizTalk调用WS-Security的web services

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

  4. Web Service-- 使用 JDK 发布 WS

    Web Service,即“Web 服务”,简写为 WS,从字面上理解,它其实就是“基于 Web 的服务”.而服务却是双方的,有服务需求方,就有服务提供方.服务提供方对外发布服务,服务需求方调用服务提 ...

  5. 使用DOSGi在OSGi环境下发布Web Services

    前言 Apache CXF是一个开源的服务框架项目,而Distributed OSGi子项目提供了基于OSGi远程服务规范的分布式组件实现.它使用Web Services,HTTP上的SOAP手段实现 ...

  6. 分分钟带你玩转 Web Services

    当大型需求被数个公司分割开来,各公司系统相互交换数据的问题就会接踵而来. 毕竟是多家不同的公司的产品,研发开发语言.采用技术框架基本上是百花齐放. 怎样让自家系统提供的服务具有跨平台.跨语言.跨各种防 ...

  7. So easy Webservice 8.spring整合CXF 发布WS

    1.添加jar包(cxf的jar包中包含了spring的jar包),添加spring配置文件 2.web.xml中配置CXFServlet,过滤WS服务的地址 <!-- 配置CXFServlet ...

  8. Java Web services: WS-Security with Metro--referenc

    As you know from "Introducing Metro," the reference implementations of the JAXB 2.x data-b ...

  9. Google Maps API Web Services

    原文:Google Maps API Web Services 摘自:https://developers.google.com/maps/documentation/webservices/ Goo ...

随机推荐

  1. codeforces 651C(map、去重)

    题目链接:http://codeforces.com/contest/651/problem/C 思路:结果就是计算同一横坐标.纵坐标上有多少点,再减去可能重复的数量(用map,pair存一下就OK了 ...

  2. C#知识体系(二)用案例来理解委托与事件

    上一篇博客讲到了LinQ和lambda的常用方法 还有很多我们未知但c#设计团队已经为我们封装好的类和方法.随着我们不断的熟悉C#语言,渐渐的就会接触到其他的知识点,委托.事件.反射.线程.同步,异步 ...

  3. SQL Server如何编辑超过前200行的数据

    从SQL Server 2008开始,微软为了提高查询效率等原因,右键点击表时弹出菜单中默认没有"显示所有行",而以"选择前1000行"替代.这有时会为我们带来 ...

  4. IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)

    1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  5. 默认.htpl改为.htpl

    创建一个.html 或.htpl 在打开的html页面空白处右击--属性

  6. js对象详解

    js自定义对象 一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在J ...

  7. telnet -测试端口号

    点击计算机的开始菜单-->运行 ,输入CMD命令,然后确定.打开cmd命令行.   输入telnet测试端口命令: telnet IP 端口 或者 telnet 域名 端口 回车   如果端口关 ...

  8. 配置不当导致无法加载odoo-10.0模块

    启动odoo-bin时出错 2017-01-05 06:38:51,046 5480 INFO ? odoo: Odoo version 10.02017-01-05 06:38:51,046 548 ...

  9. mysql 与 mycat集成读写分离

    1,先说下同步数据库原理,其实很简单.就是在主库做数据库操作的时候,会生成一个本地日志,日志会在my.ini当中配置看图一,读库会实时去扫描日志,如果有更新就直接在读库执行. 这个是主库my.ini配 ...

  10. CRT 和mysql 中文乱码解决方式

    mysql 安装mysql 1. 使用root用户: su root 2. 安装 yum install mysql yum install mysql-server yum install mysq ...