转自: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. linux命令详解之ls命令

    ls命令概述 ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名.以文件名进行排序及文件名代表的颜色显示.当不加参数时,默认列 ...

  2. 百度AI训练营笔记

    参加了两天百度AI训练营,简单记录一下学到的东西 一.知识图谱 知识图谱是让机器具有积累知识.运用知识的本领. 由于目前知识量很大,所以人工标注的方法无法满足,可以采用数据驱动.自底向上的方式自动构建 ...

  3. Java中接口与抽象类的异同

    定义(以下是百度百科中的定义): Java接口:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具 ...

  4. 网页制作怎么加MP4,用HTML代码

    <video src="movie.mp4" controls="controls"> 您的浏览器不支持 video 标签. </video& ...

  5. viewport的相关知识点

    主要说一些viewport的基本原理以及使用 ㈠概念 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的 ...

  6. python基础之流程控制

    流程控制之----if 流程控制,是指程序在运行时,个别的指令(或者是陈述.子程序)运行或者求值的顺序.人生道路上的岔口有很多,在每个路口都是一个选择,在每个路口加上一个标签,选择哪个就是满足哪个条件 ...

  7. scala实战学习-尾递归函数

    求 $$ \Sigma\sideset{^b_a}f(x) $$ object sumfunc{ def sum(f: Int => Int)(a: Int)(b:Int): Int = { @ ...

  8. vue计算属性详解

    一.什么是计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> ...

  9. DS博客作业8——课程总结

    1.当初你是如何做出选择计算机专业的决定的? 本来我在集美大学第一志愿专业是理学院的数据科学与大数据,奈何隔壁县城小伙伴比我高了2分,我就来到了网络,但经过我和她的交流,我意识到我们的课程差不多,同样 ...

  10. mybatis 中的 update 返回值

    摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库 ...