带有SoapHeader验证的WebServices服务创建、部署及C#中的静态调用方法

转自[Alex-D](https://blog.csdn.net/u012995964/article/details/54562111)

本文记录带有SoapHeader验证的WebServices服务创建、部署及C#中的静态调用方法,基于 Windows8.1Visual Studio 2013IIS8 环境实现。


WebServices服务创建

Visual Studio 2013中创建WebServices
  1. 创建一个空的 ASP.NET Web 应用程序

新建空的Asp.net的web应用程序

  1. 创建 WebService 服务的程序(asmx格式)文件:

添加服务程序文件
首次右键“添加”时,看不到图中所示的 “Web 服务(ASMX)” ,可以点击“新建项(W)”来实现创建:

创建ASMX文件1
创建ASMX文件2

  1. 到此 WebService 服务创建完成,可以看到如下基础代码:

新建ASMX文件内容

  1. 快捷键 F5ctrl + F5 运行程序如下:

VS的IIS Express中运行结果
此时可以点击页面的 Hello World 跳转到基于 HTTP POST 协议的调用测试页面 :

服务测试

点击“调用”即可以在新的页面看到返回的结果:

返回结果


添加SoapHeader验证

创建基础的WebService服务后,根据需要,有时服务会需要权限来保证安全,这里通过添加SoapHeader验证(即Soap的头信息验证)来实现。
1. 首先需要我们自己去实现一个有身份验证信息的类,这个类继承于 System.Web.Services.Protocols.SoapHeader , 代码如下:

    /// <summary>
    /// 自定义MySoapHeader类
    /// </summary>
    public class MySoapHeader : System.Web.Services.Protocols.SoapHeader {

        private string userName;
        private string passWord;

        public MySoapHeader() { }
        public MySoapHeader(string userName, string passWord) {
            this.userName = userName;
            this.passWord = passWord;
        }

        public string UserName {
            set {
                userName = value;
            }
            get {
                return userName;
            }
        }
        public string PassWord
        {
            set
            {
                passWord = value;
            }
            get
            {
                return passWord;
            }
        }
    }

2.修改WebService类


    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
        public MySoapHeader soapHeader;

        [WebMethod(Description="SoapHeader验证")]
        [System.Web.Services.Protocols.SoapHeader("soapHeader")]
        public string HelloWorld()
        {
            //简单验证用户信息
            //可以通过数据库或其他方式验证
            if ("admin".Equals(soapHeader.UserName) & "admin123".Equals(soapHeader.PassWord))
            {
                return "用户验证通过!";
            }
            else
            {
                return "对不起,您没有访问权限!";
            }
        }
    }

至此实现了SoapHeader验证的添加,此处注意Webservice类中的方法上添加上SoapHeader特性。即上面代码中的[System.Web.Services.Protocols.SoapHeader("soapHeader")]

此处为简单实现,高级实现,可以参考MSDN提供的 教程文档


WebService服务部署

WebService服务程序的发布

编写好的web程序或者服务等,可以通过发布直接部署到服务器。这里没有远程服务器,所以使用本地的IIS服务器来运行WebService服务。发布方式如下:

服务发布

自定义发布目标配置文件

发布方法为文件系统(即本地目录)
后面两项配置默认即可,此时点击发布按钮,等待控制台显示如下提示,即表示发布成功:

发布成功

此时可以在发布的目录中看到如下文件:

目录内容

本地IIS服务部署

在本地IIS的部署可以参看前文 Windows8.1中IIS服务安装及站点配置 中站点部署的部分。

部署后浏览结果如下:

部署后浏览结果


WebService的调用

创建客户端

创建控制台应用程序,用来调用测试。
创建客户端测试程序1

创建客户端测试程序2

添加引用

新建完项目后,需要引用WebService服务,用于调用WebService

添加添加引用

添加服务引用

添加完引用后,打开“Program.cs”文件的Main方法中输入以下语句:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestService
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建WebService服务实例      
            MyWebServices.WebService1SoapClient service = new MyWebServices.WebService1SoapClient();
            //创建自定义SoapHeader对象实例
            MyWebServices.MySoapHeader header = new MyWebServices.MySoapHeader();

            //未设置SoapHeader的服务调用
            Console.WriteLine("未设置SoapHeader的服务调用:" + service.HelloWorld(header));
            Console.WriteLine();

            //将用户名与密码存入SoapHeader;
            header.UserName = "admin";
            header.PassWord = "admin123";

            设置SoapHeader的服务调用
            Console.WriteLine("未设置SoapHeader的服务调用:" + service.HelloWorld(header));

            Console.Read();
        }
    }
}

运行后,测试结果如下:

测试结果

源码: C#静态调用带有SoapHeader验证的WebServices

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#调用WebService并添加SOAPHeader头信息的方法有多种。一种简单的方法是在具体的WebService方法上添加特性\[SoapHeader("RequestSOAPHeader")\]\[1\]。另一种方法是通过编写代码来发送HTTP POST请求并添加SOAPHeader头信息\[2\]\[3\]。你可以使用WebRequest类创建一个WebRequest对象,设置ContentType为"text/xml; charset=utf-8",设置Method为"POST",并添加SOAPAction头信息。然后使用GetRequestStream方法获取请求流,将参数转换为字节数组并写入请求流。最后,使用GetResponse方法获取响应,并使用StreamReader读取响应流的数据。这样就可以得到调用WebService后的结果。 #### 引用[.reference_title] - *1* [C#WebService客户端,添加SOAPHeader信息。](https://blog.csdn.net/catzhangzbt/article/details/112779826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C#调用Java的WebService添加SOAPHeader验证](https://blog.csdn.net/weixin_30636089/article/details/99554547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值