分basicHttpBinding和wsHttpBinding两种情况:

一、basicHttpBinding比较简单一点,先来看看它所要求的HTTP包:
POST /WCFService1/Service.svc HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Host: 127.0.0.1:3673
Content-Length: 566
Expect: 100-continue
Connection: Keep-Alive

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
   <s:Body>
      <MyOperation2 xmlns="http://tempuri.org/">
         <myValue1>3</myValue1>
      </MyOperation2>
   </s:Body></s:Envelope>

经过tcpmon-1.0查看AXIS2发的包,头里边有个chunk然后没有Content-Length,所以在程序中axis2需要关掉chunk开关:
_messageContext.setProperty(HTTPConstants.CHUNKED, "false");

把chunk关掉后,会自动加上Content-Length。另外,Expect 100-continue与Connection: Keep-Alive还没生成,但不影响AXIS2调用WCF了。

二、wsHttpBinding稍微复杂一点点
还是先来看看它所需要的包:
POST /WCFService1/Service.svc HTTP/1.1
Content-Type: application/soap+xml; charset=UTF-8; 
Host: 127.0.0.1:3673
Content-Length: 642

<?xml version='1.0' encoding='UTF-8'?>
   <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
      <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
         <wsa:To>http://127.0.0.1:3673/WCFService1/Service.svc</wsa:To>
         <wsa:ReplyTo>
           <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
         </wsa:ReplyTo>
         <wsa:MessageID>urn:uuid:651A41AA122CE788291212918783422</wsa:MessageID>
         <wsa:Action>http://tempuri.org/IMyService/MyOperation2</wsa:Action>
      </soapenv:Header>
      <soapenv:Body>
         <ns1:MyOperation2 xmlns:ns1="http://tempuri.org/">
            <ns1:myValue1>33</ns1:myValue1>
         </ns1:MyOperation2>
      </soapenv:Body>
   </soapenv:Envelope>

它与basicHttpBinding有什么区别?区别在于多了Soapenv:Header部分,而且使用了WS-Addressing。所以要使AXIS2的WS-Addressing enable,怎么弄?网上找了很久,说是sample中有的,就去看sample:axis2-1.4\samples\userguide\src\userguide\clients\ClientSideModuleEngagement.java
原来要先读一个axis2.xml这样的配置文件

我在最长的构造函数中加入了这么一句:
 public WSHttpBinding_IMyServiceStub(
   org.apache.axis2.context.ConfigurationContext configurationContext,
   java.lang.String targetEndpoint, boolean useSeparateListener)
{
  if(configurationContext == null)
  {
         File repository = new File("D:\\Program Files\\axis2-1.4\\repository");
         if (!repository.exists()) {
             try {
     throw new FileNotFoundException("Repository Doesnot Exist");
    } catch (FileNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
         }
         //copy the LoggingModule.mar to "modules" folder.
         //then modify the axis2.xml that is generating there according to
         //phases that being included in the "module.xml"
         configurationContext = ConfigurationContextFactory.
                 createConfigurationContextFromFileSystem(repository.getAbsolutePath(),
"D:\\Program Files\\axis2-1.4\\conf\\axis2.xml");
  }
...
}

一般装好的axis2.xml都会加入所有的modules,其中会包括addressing,所以是有效的。能不能最简自己再试试吧。
然后再加入以下几句:
  _serviceClient.engageModule(new javax.xml.namespace.QName( org.apache.axis2.Constants.MODULE_ADDRESSING ) );//编译器说这个过时了,新的不知道怎么写,先将就着吧
  
  _serviceClient.getOptions().setTo(new EndpointReference(http://127.0.0.1:3673/WCFService1/Service.svc)); //写上<soapenv:header>中<wsa:To>的地址

_serviceClient.getOptions().setProperty( AddressingConstants.INCLUDE_OPTIONAL_HEADERS, Boolean.TRUE); // 不加这句的话在<soapenv:header>只有<wsa:To> 和<wsa:Action>还有<wsa:MessageID>,其中MessageID是自动生成的一个唯一的编号

三、Mtom
经过上面的折磨,Mtom相对来说简单一点,只要在WCF服务器端打开Mtom,然后客户端在axis2.xml中有个<parameter name="enableMTOM">false</parameter>,改成true就好了。

Axis2联接WCF(比较完整的版本)的更多相关文章

  1. iOS开发之单例设计模式(完整正确版本)

    单例的意思从字面上就可以略知一二,所谓单例就是确保在程序运行过程中只创建一个对象实例.可以用于需要被多次广泛或者说多次使用的资源中,比如我们常见的网络请求类.工具类以及其它管理类等.比如我iOS开发中 ...

  2. Go 完整实现版本比较 VersionCompare 函数

    [转] http://www.syyong.com/Go/Go-implementation-version-comparison-VersionCompare-function.html Versi ...

  3. 使用ajax异步提交表单数据(史上最完整的版本)

    额 为啥用这个 不用form呢,因为这个效率高,而且在浏览器中运行程序的时候如果出现bug的话,页面不会显示显示错误信息,提高了用户的体验度. 那么,就来看看把,先给数据库表截个图哈 然后写项目被 我 ...

  4. UBIFS文件系统简介 与 利用mkfs.ubifs和ubinize两个工具制作UBI镜像 (完整理解版本)

    UBI文件系统简介 在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs.jffs2.yaffs2等文件系统. 它们也都是基于文件系 统+mtd+flash设备的架 ...

  5. storm_jdbc 最完整的版本

    开头:我这里是根据bolt与trident进行分类的,写入和读取的方法可能会在同一个类中,最后会展示一个测试的类来说明怎么用. JdbcSpout:这个类是我写入数据和读取数据的公用spout,细节注 ...

  6. 必应缤纷桌面的必应助手-软件分析和用户市场需求之-----二.体验部分 Ryan Mao (毛宇11061171) (完整版本请参考团队博客)

    <必应缤纷桌面的必应助手> 2.体验部分 Ryan Mao (毛宇11061171) (完整分析报告请参考团队博客http://www.cnblogs.com/Z-XML/) 我花了2天的 ...

  7. wcf契约版本处理与异常处理(随记)

    -----------版本控制策略:必须支持向后兼容:----就是当服务端发生改变,但客户端未更新会不会发生错误: 一旦契约发布,若要契约发生变化,如何不影响客户端使用: ----wsdl:契约: 服 ...

  8. WCF+AJAX最佳实践

    本文是基于Frank Xu的一个webcast上的串并总结,图片等都截至视频,谨致谢. 路线图 什么是WCF Windows Communication Foundation是MS为构建面向服务的应用 ...

  9. GIT分布式版本控制系统

    Git诞生历史 我想大家还记得Linus torvalds在1991年时发布了Linux操作系统吧,从那以后Linux系统变不断发展壮大,因为Linux系统开源的特性,所以一直接受着来自全球Linux ...

随机推荐

  1. Headfirst设计模式的C++实现——适配器(Adapter)

    duck.h #ifndef _DUCK_H_ #define _DUCK_H_ class DUCK { public: ; ; }; #endif mallard_duck.h #ifndef _ ...

  2. 使用struts2+hibernate的增、删、改、查构架简单的学生管理系统

    工程环境:MyEclipse8.5 其他配置:Hibernate框架+jtds链接数据库驱动+Sql2008数据库+MyEclipse serevr+JDK1.7 开发环境:Win7x64 这个项目用 ...

  3. MySql启动提示:The server quit without updating PID file(…)失败

    在网上找了很多 1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data”  ...

  4. Linux之CentOS下vsftp安装及配置相关操作

    1.安装ftps——vsftpd: #yum install vsftpd 2.指定上传下载目录配置: 如:用户名:xxx,需指定目录:/xxx/xxx #useradd -d /xxx/xxx -s ...

  5. PL/SQL Developer不安装客户端连接远程oracle数据库(转)

    1.下载敏捷客户端InstantClient(40M左右,选择适合自己的下载,我的是instantclient-basic-win32-11.2.0.1.0.zip ):http://www.orac ...

  6. HDOJ(1000) A + B Problem

    代码如下: #include <stdio.h> int main(void) { int a, b; ){ printf("%d\n", a+b); } ; }

  7. Sublime Text3快捷键一览表

    选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...

  8. 机器学习实战——k-近邻算法

    本章内容 ================================ (一)什么是k-近邻分类算法 (二)怎样从文件中解析和导入数据 (三)使用Matplotlib创建扩散图 (四)对数据进行归 ...

  9. 【@ContextConfiguration】java世界的那些注解

    @ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件 单个文件 @ContextConfiguration(Locations="../a ...

  10. STL set_difference set_intersection set_union 操作

    以下是STL algorithm的几个函数,使用的条件是有序容器,所以 vector在被sort了之后是可以使用的,set也是可以使用的. set_difference 这个是求得在第一个容器中有,第 ...