`
kusix
  • 浏览: 68590 次
社区版块
存档分类
最新评论

.net调用含SoapHeader的xfire服务

阅读更多
使用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报文,但是太麻烦,实在没办法了再用吧。
分享到:
评论
13 楼 kusix 2010-12-08  
.net方稍微修改一下代码很好

但是哥几个别光说不练啊

贴点代码上来成吗

12 楼 woodrui 2010-12-02  
可以让.net方稍微修改一下代码(修改量很小) 就可以的 你不用改wsdl
11 楼 kusix 2010-12-02  
kimmqueen 写道
kusix 写道
kimmqueen 写道
kusix 写道
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

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

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

这个改的就海了去了

所以还不如改wsdl

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


呃。。。实际上,我是WSDL的提供方,是xfire那一端,.net系统那边搞不定,我才出此下策(改WSDL)

事实上,当时我负责xfire+web ref,
就是双方的接口定义和处理。我最终改了ref

xfire是我做的,base spring,
winform里的web reference+soapheader都是我封装的。

-----------------------------

一样的,有一方搞定了,大家就和谐了。


对的,主要是为了和谐
.net那边的代码我管不着,另一个公司的系统,我只能装个VS模拟他们的应用,然后尝试从我这边解决问题。
10 楼 kimmqueen 2010-12-02  
kusix 写道
kimmqueen 写道
kusix 写道
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

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

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

这个改的就海了去了

所以还不如改wsdl

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


呃。。。实际上,我是WSDL的提供方,是xfire那一端,.net系统那边搞不定,我才出此下策(改WSDL)

事实上,当时我负责xfire+web ref,
就是双方的接口定义和处理。我最终改了ref

xfire是我做的,base spring,
winform里的web reference+soapheader都是我封装的。

-----------------------------

一样的,有一方搞定了,大家就和谐了。
9 楼 kusix 2010-12-02  
kimmqueen 写道
kusix 写道
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

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

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

这个改的就海了去了

所以还不如改wsdl

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


呃。。。实际上,我是WSDL的提供方,是xfire那一端,.net系统那边搞不定,我才出此下策(改WSDL)
8 楼 kusix 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,估计想想办法也可以用
7 楼 kimmqueen 2010-12-02  
kusix 写道
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

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

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

这个改的就海了去了

所以还不如改wsdl

wsdl是别人的(代码),
ref是自己的代码。
6 楼 kusix 2010-12-02  
刚才想了一下,改reference应该是可行的,但是太麻烦,要改的地方很多

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

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

这个改的就海了去了

所以还不如改wsdl
5 楼 kimmqueen 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,解决的问题。
4 楼 kusix 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

你可以试验下,如果成功,把代码贴下分享下。
3 楼 kimmqueen 2010-12-02  
kusix 写道
kimmqueen 写道
.net WSE 支持soapheader的UserToken的


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

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

略微修改下 web reference生成的stub代码即可。
2 楼 kusix 2010-12-02  
kimmqueen 写道
.net WSE 支持soapheader的UserToken的


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

WSE和WCF我都试过,他们产生的soapheader在java服务端,xfire无法接收到
1 楼 kimmqueen 2010-12-01  
.net WSE 支持soapheader的UserToken的

相关推荐

    .net调用java xfire发布的webservice封装soapheader头信息

    标题与描述均提到了“.NET调用Java XFire发布的WebService封装SOAPHeader头信息”,这是一个涉及跨平台服务调用的问题,具体来说是关于如何在.NET环境中调用由Java使用XFire框架发布的WebService,并正确处理...

    推荐使用.NET调用java编写的WebService方法借鉴.pdf

    本文主要介绍如何在.NET环境中调用由Java编写的WebService方法,尤其是在处理复杂的SoapHeader时。以下是一些关键知识点: 1. **SOAPUI工具**:SOAPUI是一个用于测试Web服务的强大工具,它可以自动生成调用Web服务...

    【ASP.NET编程知识】Asp.net页面中调用soapheader进行验证的操作步骤.docx

    以下是在 ASP.NET 页面中调用 SOAP Header 进行验证的操作步骤详解: 1. **定义 SOAP 头验证类**: 在 ASP.NET 中,为了在 SOAP 请求中添加自定义头部信息,我们需要创建一个类,该类继承自 `SoapHeader` 类。例如...

    C#静态调用带有SoapHeader验证的WebService

    关于此代码的使用及相关配置,可以见此文:http://blog.csdn.net/u012995964/article/details/54562111 代码开发时环境:Windows8.1、...注意:测试代码时,重新部署WebService服务且修改客户端测试程序的服务引用

    asp.net 动态调用WebService

    总的来说,ASP.NET中的动态调用WebService提供了一种强大的灵活性,可以在运行时适应变化的服务位置,而无需对代码进行大规模修改。这种技术对于那些需要频繁调整服务地址或者需要动态选择服务版本的应用程序尤其...

    .NET 访问JAVA的WEBSERVICE使用SOAP头

    通过以上步骤,.NET应用程序就能够成功地与Java WebService进行通信,并通过SOAP头传输必要的认证信息,确保了跨平台服务调用的安全性和可靠性。这一过程虽然涉及一定的技术细节和手动编码工作,但对于构建稳定、...

    Asp.net页面中调用soapheader进行验证的操作步骤

    本文为大家分享了Asp.net页面中调用以SOAP头作验证的web services操作步骤,供大家参考,具体内容如下 第一步:用来作SOAP验证的类必须从SoapHeader类派生,类中Public的属性将出现在自动产生XML节点中,即: ...

    Java Webservice Axis2 Client(含soapheader验证)

    4. **调用Web服务**:设置好SOAP Header后,可以使用生成的服务代理类调用Web服务方法。这通常涉及创建请求对象,设置参数,然后调用服务方法。 ```java YourWebServiceProxy proxy = new YourWebServiceProxy();...

    C#通过SOAP使用HttpWebRequest调用带有身份验证的WebService示例

    本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599

    C#调用使用java的带soaphead的webservice

    这个过程涉及到.NET Framework的Web服务客户端代理生成、SOAP消息的处理以及与Java Web服务的交互。 首先,我们需要理解SOAP Header的重要性。SOAP Header是SOAP消息的一部分,它提供了扩展SOAP消息功能的能力,...

    SoapCore:ASP.NET Core 的 SOAP 扩展

    ASP.NET Core 的 SOAP 协议中间件 基于 Microsoft 文章: 。 支持 ref\out 参数,异常。 适用于旧版 SOAP\WCF 客户端。 入门 要求 支持以下框架: .NET 5.0(使用 ASP.NET Core 5.0) .NET Core 3.1(使用 ASP...

    WebService安全性之SoapHeader

    接下来,在服务接口上使用`[SoapHeader]`特性声明SoapHeader参数,这样客户端在调用服务时就需要提供这个Header。在服务实现中,我们可以通过检查Header来验证用户身份。 ```csharp [WebService(Namespace = ...

    关于使用xfire创建webservice,并且使用消息头的示例

    在给定的“SoapHeader”文件中,可能包含了示例代码或者配置,演示了如何在XFire服务中使用SOAP消息头。这些示例通常会展示如何创建自定义消息头类,以及如何在XFire的配置中设置消息处理器。通过解析和理解这些示例...

    asp.net接口 soap接口默认带用户名和密码校验

    ASP.NET 是微软开发的一种用于构建Web应用程序的框架,它提供了丰富的功能来创建动态网站、Web服务和Web应用程序。SOAP(Simple Object Access Protocol)是用于交换结构化信息的标准协议,常用于Web服务通信,允许...

    亮剑.NET深入体验与实战精要2

    7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动发送HTTP请求调用Web Service 295 7.8 实现异步调用Web Service 297 7.9 如何保证Web Service的安全 299 7.9.1 通过SoapHeader来增强 Web Service的安全性 299 ...

    soapheader使用

    3. **编写请求代码**:创建客户端对象,并调用相应的Web服务方法。确保处理异常情况。 4. **编译代码**:将客户端代码与相关的库文件一起编译,确保所有依赖的类和库都被正确导入。 #### 四、总结 SOAPHeader是...

    soapHeader验证例子

    XFire是Java的Web服务框架,已被Apache CXF所取代,但它在本例中用于创建和消费SOAP服务。 1. **SOAP Header的理解**: SOAP Header是SOAP消息的非必需部分,与SOAP Body一起构成了整个SOAP消息。Header中的元素不...

    【ASP.NET编程知识】ASP.NET中基于soaphead的webservice安全机制.docx

    在ASP.NET中,我们可以利用SOAP头来实现对Web服务的调用者进行身份验证,确保只有经过许可的用户或应用程序能够访问服务。 ### 服务端实现 1. **定义自定义SOAP头类**:首先,我们需要创建一个继承自`SoapHeader`...

    C# 为webservice接口添加认证

    在C#中,我们通常使用.NET框架提供的System.Web.Services.Protocols.SoapHeader类来处理这些头信息。 要实现SoapHeader认证,我们需要遵循以下步骤: 1. **定义SoapHeader类**:创建一个自定义的SoapHeader类,...

Global site tag (gtag.js) - Google Analytics