ASP.NET调用JAVA的CXF生成的Webservice,并带有Soapheader验证的解决方案
2015-11-13 10:49
633 查看
本文并不讲述怎么搭建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
2.2、用记事本打开上面添加的web引用的Reference.cs文件,在服务定义中加入代码:
我这里是:
然后找到每个服务的定义位置,在方法上面加入:
例如我这里的接口方法getUserInfo:
2.3、接口调用
在需要调用接口的页面引用上面的web引用:
实例化Soapheader
构造Soapheader
最后调用方法
例如我这里的:
3、如果接口更新,需要重新更新web引用,则需要重复上面的 2.2 的步骤,所以总体来说使用比较麻烦。
另外如需更改命名空间可以参考文章:/article/5297715.html
下面直接开始讲解在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 的步骤,所以总体来说使用比较麻烦。
另外如需更改命名空间可以参考文章:/article/5297715.html
相关文章推荐
- ASP.NET在IIS7.5(IIS7)配置伪静态
- ExtAspNet2.1.0版本
- IBatis.net在asp.net MVC下的使用
- ASP.NET 抓取网页
- 摘抄——OWASP_Code_Review_Guide-V1_1 (1)
- asp.net 子页面关闭刷新父页面
- asp.net 子页面关闭刷新父页面
- asp.net夜话之五:Page类和回调技术
- (easyui datagrid+mvc+json)之asp.net分页查询
- Asp.net页面间传值方式汇总
- ASP.NET页面通过URL传递参数(一)(转载)
- Request 分别获取具有相同 name 属性表单元素值—— 怀念 Classic ASP (转自博客园)
- ASP.NET 5 开发者的五个阶段
- Struts2整合jasperreport缓存处理方法
- asp.net下载文件几种方式
- Asp.net获取程序路径
- IIS对ASP的解析问题
- ASP.NET 页生命周期概述
- ASP.NET 简单鼠标右键效果contextmenutrip
- .Net动态代理Castle系列