转自:http://blog.csdn.net/u012995964/article/details/54562111

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

WebServices服务创建

Visual Studio 2013中创建WebServices

  1. 创建一个空的 ASP.NET Web 应用程序 :
  2. 创建 WebService 服务的程序(asmx格式)文件:
  3. 首次右键“添加”时,看不到图中所示的 “Web 服务(ASMX)” ,可以点击“新建项(W)”来实现创建:


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

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


    此时可以点击页面的 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的调用

创建客户端

创建控制台应用程序,用来调用测试。 

添加引用

新建完项目后,需要引用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


参考及推荐

关于Web Services学习,可以看这里:

关于IIS Express和本地IIS服务的一些介绍比较,可以看这里

C#静态调用带有SoapHeader验证的WebServices的更多相关文章

  1. C#动态调用带有SoapHeader验证的WebServices

    http://blog.csdn.net/u012995964/article/details/54573143 本文记录C#中通过反射动态的调用带有SoapHeader验证的WebServices服 ...

  2. 带SoapHeader验证的WebServices

    一般在项目中,制作的都是基于SOAP协议的webservices,其描述语言是WSDL.但是有时候在项目中,需要保证webservices的安全,需要对其进行进行验证,那么我们就要实现SoapHead ...

  3. HTML中调用带有SoapHeader头的WebService的两种方法

    第一种: function CallWebMethodWithHeader() { var soapXML = "<soap:Envelope xmlns:xsi='http://ww ...

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

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

  5. C#调用Java的WebService添加SOAPHeader验证

    C#调用Java的WebService添加SOAPHeader验证(2) 1.问题描述 调用的Java的webservice string Invoke(string func, string req ...

  6. .net 客户端调用java或.net webservice进行soapheader验证

    .net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...

  7. C#/PHP调用有SoapHeader的WebService

    日前调用第三方WebService接口时遇到了SoapHeader验证的问题,记录一下解决方法. 接口需要的格式: <soapenv:Header> <ReqSOAPHeader x ...

  8. java servlet调用带有多个返回结果集的存储过程

    一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要 ...

  9. .net 在不同情况下调用带soapheader的webservice的方式

    国庆长假到了,本想出去玩玩,无奈自己屌丝一枚,啥都没有,只能自己宅在家里思考思考人生.不过人生还是过于复杂,一时间也想不出个所以然,只能是整理一下在工作中遇到的一些小问题,首先是关于带soaphead ...

随机推荐

  1. sys.argv的意义及用法

    sys.argv的意义 简单来说,sys.argv是一个参数列表,这个列表存放着从外界获取到的参数(可能有多个) 下面以一个例子来详细阐述sys.argv,本次演示在ubuntu环境下运行 新建一个t ...

  2. nginx命令和配置

    centos 6.8安装的nginx 1.12.2 1.nginx常用的命令 使用nginx命令前,进入到/usr/local/nginx/sbin/目录 1)查看nginx版本 进入到/usr/lo ...

  3. List集合的三个实现类比较

    1. ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 2. Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 3. LinkedList 底层数据结构是链 ...

  4. css之页面透明

    能使元素变的透明的方法有: 1.Opacity 2.RGBA opacity会使后代元素都透明,而RGBA不会!

  5. maven安装问题解决

    出现: The JAVA_HOME environment variable is not defined correctly This environment variable is needed ...

  6. k8s中flannel:镜像下载不了

    重新部署一套K8S集群时,由于K8S需要扁平化的网络,所以当执行下面的 root@master ~]# kubectl apply -f kube-flannel.yml 会开始下载镜像,然后去启动, ...

  7. sql in条件 超过1000字符的处理方法

    private string getOracleSQLIn(string[] ids, string field) { int count = Math.Min(ids.Length, 1000); ...

  8. AcWing:139. 回文子串的最大长度(字符串Hash + 前缀和 + 后缀和 + 二分)

    如果一个字符串正着读和倒着读是一样的,则称它是回文的. 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少. 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个 ...

  9. linux 文件目录介绍

    网上的资源 太多了,copy 过来 留给自己用吧! 摘自 : http:/ 使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系 ...

  10. servlet3.0以后可以不用web.xml配置了

    AbstractDispatcherServletInitializer 注意:删除了web.xml会报错,web.xml is missing and <failOnMissingWebXml ...