精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-01
最后修改:2010-12-01
通常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报文,但是太麻烦,实在没办法了再用吧。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-01
.net WSE 支持soapheader的UserToken的
|
|
返回顶楼 | |
发表时间:2010-12-02
kimmqueen 写道 .net WSE 支持soapheader的UserToken的
我知道支持,WSE和WCF都支持,但是对于这种不携带soapheader信息的wsdl来说,都是废的 WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到 |
|
返回顶楼 | |
发表时间:2010-12-02
kusix 写道 kimmqueen 写道 .net WSE 支持soapheader的UserToken的
我知道支持,WSE和WCF都支持,但是对于这种不携带soapheader信息的wsdl来说,都是废的 WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到 略微修改下 web reference生成的stub代码即可。 |
|
返回顶楼 | |
发表时间: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 你可以试验下,如果成功,把代码贴下分享下。 |
|
返回顶楼 | |
发表时间: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,解决的问题。 |
|
返回顶楼 | |
发表时间:2010-12-02
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多
我改wsdl之前和之后,在.net端引入服务生成的reference差别相当大 改wsdl之前生成的reference.cs只有180行,改之后生成的有1600多行 这个改的就海了去了 所以还不如改wsdl |
|
返回顶楼 | |
发表时间:2010-12-02
kusix 写道 刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多 我改wsdl之前和之后,在.net端引入服务生成的reference差别相当大 改wsdl之前生成的reference.cs只有180行,改之后生成的有1600多行 这个改的就海了去了 所以还不如改wsdl wsdl是别人的(代码), ref是自己的代码。 |
|
返回顶楼 | |
发表时间: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,估计想想办法也可以用 |
|
返回顶楼 | |
发表时间:2010-12-02
kimmqueen 写道 kusix 写道 刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多
我改wsdl之前和之后,在.net端引入服务生成的reference差别相当大 改wsdl之前生成的reference.cs只有180行,改之后生成的有1600多行 这个改的就海了去了 所以还不如改wsdl wsdl是别人的(代码), ref是自己的代码。 呃。。。实际上,我是WSDL的提供方,是xfire那一端,.net系统那边搞不定,我才出此下策(改WSDL) |
|
返回顶楼 | |