论坛首页 Java企业应用论坛

.net调用含SoapHeader的xfire服务

浏览 7015 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-01   最后修改:2010-12-01
使用webservice做接口时通常要做鉴权,而为了不影响业务逻辑,鉴权信息经常是要放在soapheader中的。

通常java调java比较简单,而这次是.net系统调我们这边的J2EE系统,而我们的服务用的是xfire,这时候就有个问题了,xfire处理soapheader通常是使用inHandlers的拦截方式,对于对外公布的服务WSDL而言,是看不到的。而.net如果引用这个WSDL,生成的客户端自然是不包含头信息的,google之,试了无数种方法,.net客户端发过去的信息都是不包含头信息的。

有3种办法:

1.使xfire发布出去的WSDL携带有soapheader信息

google之,无果,如有同学告诉一下方法,这里不胜感激。


2.修改WSDL

目前我采取的是这种方法,把xfire生成的WSDL直接改之,使之具有soapheader信息,然后把WSDL发给.net那边的开发人员,直接引入就可以使用。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.xx.com/services/xxService">

<xsd:element name="AuthenticationToken" type="tns:AuthenticationToken" />
      <xsd:complexType name="AuthenticationToken">
        <xsd:sequence>
          <xsd:element minOccurs="0" maxOccurs="1" name="username" type="xsd:string" />
	  <xsd:element minOccurs="0" maxOccurs="1" name="password" type="xsd:string" />
        </xsd:sequence>
        <xsd:anyAttribute />
      </xsd:complexType>
</xsd:schema>

...

<wsdl:message name="AuthSoapHeader">
    <wsdl:part name="AuthenticationToken" element="tns:AuthenticationToken" />
</wsdl:message>

...

<wsdl:operation name="helloworld">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="helloworldRequest">
        <wsdlsoap:body use="literal"/>
	<wsdlsoap:header message="tns:AuthSoapHeader" part="AuthenticationToken" use="literal" />
      </wsdl:input>
      <wsdl:output name="helloworldResponse">
        <wsdlsoap:body use="literal"/>
      </wsdl:output>
</wsdl:operation>


3..net端在调用服务时,使用http方式,拼装soap报文,直接用xml交互

这个方法肯定是有效的,webservice的原理之一也就是用http传递soap报文,但是太麻烦,实在没办法了再用吧。
   发表时间:2010-12-01  
.net WSE 支持soapheader的UserToken的
0 请登录后投票
   发表时间:2010-12-02  
kimmqueen 写道
.net WSE 支持soapheader的UserToken的


我知道支持,WSE和WCF都支持,但是对于这种不携带soapheader信息的wsdl来说,都是废的

WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到
0 请登录后投票
   发表时间:2010-12-02  
kusix 写道
kimmqueen 写道
.net WSE 支持soapheader的UserToken的


我知道支持,WSE和WCF都支持,但是对于这种不携带soapheader信息的wsdl来说,都是废的

WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到

略微修改下 web reference生成的stub代码即可。
0 请登录后投票
   发表时间:2010-12-02  
kimmqueen 写道
kusix 写道
kimmqueen 写道
.net WSE 支持soapheader的UserToken的


我知道支持,WSE和WCF都支持,但是对于这种不携带soapheader信息的wsdl来说,都是废的

WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到

略微修改下 web reference生成的stub代码即可。


改过,不行,网上能google到的方法都试了,无解, xfire的handler中都收不到header

你可以试验下,如果成功,把代码贴下分享下。
0 请登录后投票
   发表时间:2010-12-02   最后修改:2010-12-02
kusix 写道
kimmqueen 写道
kusix 写道
kimmqueen 写道
.net WSE 支持soapheader的UserToken的


我知道支持,WSE和WCF都支持,但是对于这种不携带soapheader信息的wsdl来说,都是废的

WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到

略微修改下 web reference生成的stub代码即可。


改过,不行,网上能google到的方法都试了,无解, xfire的handler中都收不到header

你可以试验下,如果成功,把代码贴下分享下。

06年做个某个银行的系统,客户端 .net 1.1 winform, WSE usertoken,
服务器端was/xfire, 最后是修改stub,封装一点东西处理client出入的soapheader,解决的问题。
0 请登录后投票
   发表时间:2010-12-02  
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

我改wsdl之前和之后,在.net端引入服务生成的reference差别相当大

改wsdl之前生成的reference.cs只有180行,改之后生成的有1600多行

这个改的就海了去了

所以还不如改wsdl
0 请登录后投票
   发表时间:2010-12-02  
kusix 写道
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

我改wsdl之前和之后,在.net端引入服务生成的reference差别相当大

改wsdl之前生成的reference.cs只有180行,改之后生成的有1600多行

这个改的就海了去了

所以还不如改wsdl

wsdl是别人的(代码),
ref是自己的代码。
0 请登录后投票
   发表时间:2010-12-02  
kimmqueen 写道
kusix 写道
kimmqueen 写道
kusix 写道
kimmqueen 写道
.net WSE 支持soapheader的UserToken的


我知道支持,WSE和WCF都支持,但是对于这种不携带soapheader信息的wsdl来说,都是废的

WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到

略微修改下 web reference生成的stub代码即可。


改过,不行,网上能google到的方法都试了,无解, xfire的handler中都收不到header

你可以试验下,如果成功,把代码贴下分享下。

06年做个某个银行的系统,客户端 .net 1.1 winform, WSE usertoken,
服务器端was/xfire, 最后是修改stub,封装一点东西处理client出入的soapheader,解决的问题。


.net1.1  那应该是WSE2.0

这个没试过,我是VS2008,估计想想办法也可以用
0 请登录后投票
   发表时间:2010-12-02  
kimmqueen 写道
kusix 写道
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

我改wsdl之前和之后,在.net端引入服务生成的reference差别相当大

改wsdl之前生成的reference.cs只有180行,改之后生成的有1600多行

这个改的就海了去了

所以还不如改wsdl

wsdl是别人的(代码),
ref是自己的代码。


呃。。。实际上,我是WSDL的提供方,是xfire那一端,.net系统那边搞不定,我才出此下策(改WSDL)
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics