ASP.NET调用JAVA的CXF生成的Webservice,并带有Soapheader验证的解决方案

本文并不讲述怎么搭建CXF,网上相关资料比较多,不再赘述。


下面直接开始讲解在ASP.NET中怎么调用CXF生成的Webservice,并处理Soapheader验证。


1、添加web引用 

注意,这里是添加web引用,不是添加服务引用。以vs2012为例,步骤如下:


[图1.1选择添加服务引用]


[图1.2点击高级按钮]


[图1.3点击添加web引用按钮]


[图1.4找到服务]


[图1.5添加成功]

2、代码编写

2.1、 添加一个类RequestSOAPHeader,继承SoapHeader

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services.Protocols;

namespace AspnetCase
{

    public class RequestSOAPHeader : SoapHeader
    {
        public string username { get; set; }
        public string password { get; set; }
        
    }

}

2.2、用记事本打开上面添加的web引用的Reference.cs文件,在服务定义中加入代码:

public RequestSOAPHeader RequestSOAPHeader { get; set; }


我这里是:



然后找到每个服务的定义位置,在方法上面加入:

[SoapHeader( "RequestSOAPHeader")]

例如我这里的接口方法 getUserInfo:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://readerInfo.webservice_new.library.adtech.com/", ResponseNamespace="http://readerInfo.webservice_new.library.adtech.com/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[SoapHeader( "RequestSOAPHeader")]
public user getUserInfo([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string arg0, [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string arg1) {
        object[] results = this.Invoke("getUserInfo", new object[] {
                    arg0,
                    arg1});
        return ((user)(results[0]));
}

2.3、接口调用

在需要调用接口的页面引用上面的web引用:

using AspnetCase.MyWebReference;

实例化Soapheader

RequestSOAPHeader userHeader = new RequestSOAPHeader();
userHeader.username = yourname;
userHeader.password = yourpwd;


构造Soapheader
 ReaderInfoWebserviceService myser = new ReaderInfoWebserviceService();
 myser.RequestSOAPHeader = userHeader;

最后调用方法

myser.getUserInfo(username, userpwd).userName

例如我这里的:

protected void Page_Load(object sender, EventArgs e)
{            
        if (!Page.IsPostBack)
        {
            RequestSOAPHeader userHeader = new RequestSOAPHeader();
            userHeader.username = "1";
            userHeader.password = "1";

            ReaderInfoWebserviceService myser = new ReaderInfoWebserviceService();
            myser.RequestSOAPHeader = userHeader;

            Response.Write(myser.getUserInfo("q", "q").userName);
        }
}

3、如果接口更新,需要重新更新web引用,则需要重复上面的 2.2 的步骤,所以总体来说使用比较麻烦。


另外如需更改命名空间可以参考文章:http://www.cnblogs.com/o2ds/p/4093413.html


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值