Webservice在请求中加入自定义的SoapHeader,比较常用的场景是在SoapHeader中携带用户登陆信息,由服务端进行身份验证。今天遇到一个需求,除了在请求时要携带SoapHeader外,在返回值中也要返回一个结构不同的SoapHeader对象。简单点,在参数中增加ref  outHeader,也可以实现需求。但是客户的WebService接口并不是这样设计的。于是找到下面的处理方法:

定义两个SoapHeader类:

    public class InSoapHeader : SoapHeader
{ public InSoapHeader()
{ } public string UserName { get; set; } public string Ip { get; set; } public string Token { get; set; }
} public class OutSoapHeader : SoapHeader
{ public OutSoapHeader()
{ } public string Ip { get; set; }
}

编写WebService服务:

    [WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
private InSoapHeader _inSoapHeader; public InSoapHeader InSoapHeader
{
get { return _inSoapHeader; }
set { _inSoapHeader = value; }
} private OutSoapHeader _outSoapHeader=new OutSoapHeader();//给定初始值,否则在返回时会null public OutSoapHeader OutSoapHeader
{
get { return _outSoapHeader; }
set { _outSoapHeader = value; }
} [WebMethod]
[SoapHeader("InSoapHeader", Direction = SoapHeaderDirection.In)]
[SoapHeader("OutSoapHeader", Direction = SoapHeaderDirection.Out)]
public string HelloWorld()
{
OutSoapHeader.Ip = "";
return string.Empty;
}
}

客户端调用程序:

        private void btnCall_Click(object sender, EventArgs e)
{
ServiceReference1.WebService1SoapClient cli = new ServiceReference1.WebService1SoapClient();
ServiceReference1.InSoapHeader inheader = new ServiceReference1.InSoapHeader() { Ip="127.0.0.1",Token="N",UserName="N"};
ServiceReference1.OutSoapHeader outheader; string result = string.Empty;
outheader=cli.HelloWorld(inheader,out result);//这时候返回值自动放到了参数中,和普通的方法还是有区别的。 System.Diagnostics.Debug.WriteLine(outheader.Ip);
//输出123123
}

Webservice返回SoapHeader的更多相关文章

  1. WebService基于SoapHeader实现安全认证(一)

    本文转载:http://www.cnblogs.com/houleixx/archive/2009/08/22/webservice-soapheader-security.html WebServi ...

  2. C#访问Java的WebService添加SOAPHeader验证的问题

    原文:C#访问Java的WebService添加SOAPHeader验证的问题 这两天做与公司OA的接口,发现C#访问Java的WebService需要提供一个SOAP的头验证信息,但是WebServ ...

  3. WebService返回DataTable

    http://blog.csdn.net/wxnjob/article/details/8638420 webservice返回datatable时报序列化错误 以下三种方案的实质应该都是序列化的,有 ...

  4. 分析案例:应用服务无响应,任务管理器中发现大量w3wp僵尸进程----等待异构系统WebService返回值

    问题描述:       某二次开发的项目反馈,不定期出现应用服务器无响应的情况,登录服务器发现任务管理器中有大量的w3wp僵尸进程. 分析过程: 针对同一进程每隔15秒抓取dump,连续抓取3个,对比 ...

  5. 【转】java 访问.net webservice返回的数据集

    转自[转的也是转的][http://blog.csdn.net/fox123871/article/details/8637839] 1. 概述 很多正在开发或者打算开发XML Web Service ...

  6. JQuery请求WebService返回数据的几种处理方式

    打开自己的博客仔细浏览了一番,发现已经好久没有写博客了,由于最近一直比较忙碌懈怠了好多.默默反省三分钟.......言归正传,现在就对最近在学习webservice的过程中遇到的几种类型的问题中我的理 ...

  7. WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据

    Webservice传递的数据只能是序列化的数据,典型的就是xml数据.   /// <summary>         /// 通过用户名和密码 返回下行数据         /// & ...

  8. WebService返回数据前台获取并处理JSON的相关问题

    起因: 记录这个问题的起因是一次解答网友的问题,当初自己初次接触webservice时也遇到过,但在写答案时,并没有很深的印象,只是知道webservice在后台返回值的时候,那里是有个坑的.网友问的 ...

  9. C#调用Java的WebService添加SOAPHeader验证(2)

    C#调用Java的WebService添加SOAPHeader验证 上一篇链接如上,更像是 Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) 来处理xml, ...

随机推荐

  1. plsql连接12cR2 PDB报错ORA-28040/ORA-01017

    http://hbxztc.blog.51cto.com/1587495/1907533 PS: 在数据库服务器上的oracle/network/admin/sqlnet.ora文件添加一行SQLNE ...

  2. 移动端不同分辨率适配--使用flexible

    根据阿里手淘团队发布的可伸缩布局方案amfe-flexible,git地址:https://github.com/amfe/lib-flexible. 使用方法: lib-flexible库的使用方法 ...

  3. win7装postgresql10.4

    第一步: 第二步: 第三步: 第四步: 第五步: 下载地址:https://get.enterprisedb.com/postgresql/postgresql-10.4-1-windows-x64. ...

  4. python下操作redis

    python安装这里我只介绍如何在Windows上安装redis,以及接下来的实践都是在Windows上进行的.在Windows上安装python的依赖库,常用的方法有两种,第一种是直接通过pip i ...

  5. 2018-2019-2 网络对抗技术 20165322 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165322 Exp1 PC平台逆向破解 目录 知识点总结 实验准备 任务一:直接修改程序机器指令,改变程序执行流程 任务二 通过构造输入参数,造成BOF攻击 ...

  6. php编译安装报错

    Cannot find OpenSSL's <evp.h> 解决方法: 下载openssl-1.1.0h.tar  包 [root@localhost ~]# cd openssl-1.1 ...

  7. mixup: Beyond Empirical Risk Minimization

    这篇论文MIT和FAIR的工作,主要是提出了一种mixup的方式.(感觉是一种产生hard sample的方法,是一种新的.更有效的数据增强.) 1 Introduction 大网络需要大数据,目前C ...

  8. HDU 1232 畅通工程(道路连接)(裸并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others)     ...

  9. C++11之std::future和std::promise

    为什么C++11引入std::future和std::promise?C++11创建了线程以后,我们不能直接从thread.join()得到结果,必须定义一个变量,在线程执行时,对这个变量赋值,然后执 ...

  10. Reading Fast Packet Processing A Survey

    COMST 2018 主要内容 这是一篇有关快速包转发的综述,先介绍了包转发的有关基础知识和背景,具体介绍了包转发的主流方法,对这些方法进行了细致详尽的比较,最后介绍了最新的方法和未来的研究方向. 包 ...