转自: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. hiho #1485 : hiho字符串(滑动窗口)

    #1485 : hiho字符串 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 如果一个字符串恰好包含2个'h'.1个'i'和1个'o',我们就称这个字符串是hiho字符 ...

  2. 【leetcode】Department Top Three Salaries

    The Employee table holds all employees. Every employee has an Id, and there is also a column for the ...

  3. ASE高级软件工程 第一周博客作业

    1.自我介绍 我叫姚顺,是来自哈尔滨工业大学计算机学院的一名大四本科生,专业方向计算机科学,目前在KC组实习.平时的业余时间主要用来打篮球,听音乐,跑步,当然还有游戏(划掉).之前的大学三年主要用来做 ...

  4. Linux安装并使用Ludwig训练模型

    一.在Python3环境安装Ludwig: 1.使用pip安装:pip install ludwig 2.源码编译安装: git clone git@github.com:uber/ludwig.gi ...

  5. SQLMAP自注入--INJECTION TECGBUQUES FINGERPRINT

    -p参数 指定扫描的参数 ,使--level失效 -p“user-agent,refer”这些参数也可以通过-p来指定 sqlmap.py -u "http://127.0.0.1/muti ...

  6. 错误“Object reference not set to an instance of an object”的解决方法

    在进行unity游戏制作的C#代码编写时,会遇到“NullReferenceException: Object reference not set to an instance of an objec ...

  7. mongo注解详解

    1.@Entity如果你想通过Morphia把你的对象保存到Mongo中,你首先要做的是使用@Entity注解你的类:@Entity(value="comm_user_favorite_co ...

  8. cgo

    package main import ( "unsafe" "fmt") /*#cgo CFLAGS: -I./#cgo LDFLAGS: -L./#incl ...

  9. 【Spark机器学习速成宝典】模型篇04朴素贝叶斯【Naive Bayes】(Python版)

    目录 朴素贝叶斯原理 朴素贝叶斯代码(Spark Python) 朴素贝叶斯原理 详见博文:http://www.cnblogs.com/itmorn/p/7905975.html 返回目录 朴素贝叶 ...

  10. spark MLlib 概念 6:ALS(Alternating Least Squares) or (ALS-WR)

    Large-scale Parallel Collaborative Filtering for the Netflix Prize http://www.hpl.hp.com/personal/Ro ...