转自: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. php核心:代际划分/运行环境等

    不想在python一棵树上吊死,不是所有Python就一定得会人工智能大数据,so...... 何谓php?早期:personel homepage 是也!后期Hypertext preprocess ...

  2. B/S文件上传下载解决方案

    需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...

  3. Protocol Buffers 开发者指南

    欢迎来到 protocol buffers 的开发者指南.protocol buffers 是一个语言中立,平台中立针对通讯协议,数据存储和其他领域中对结构化数据进行序列化的扩展方法. 本文档主要针对 ...

  4. CF 354 D 迷宫与门的旋转 BFS +状态压缩 一定要回头看看

    D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input sta ...

  5. CodeForces 1245D Shichikuji and Power Grid

    cf题面 解题思路 比赛过程中想了一个贪心--把所有城市按照自建代价排序,排在第一的城市肯定自建,之后依次判断排在后面的城市要自建还是要连接前面的.这么做WA13了(第一次忘开long longWA4 ...

  6. malloc,calloc,realloc

    与堆操作相关的两个函数 malloc #include<stdio.h> #include<stdlib.h> #include<string.h> int mai ...

  7. A.Equivalent Prefixes(ST算法)

    Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 ...

  8. Mongo rs

    概念 rs中存储了每一次对mongo数据库的CUD操作,对rs的大小进行resize. 主要有两种方法: 在未开启过rs的情况下,修改配置文件 已使用rs一段时间后,发现rs太大,重新进行大小配置 启 ...

  9. 分布式-信息方式-JMS可靠性机制

                        JMS的可靠性机制1.消息接收确认        JMS消息只有在被确认之后,才认为已经被成功地消费了.消息的成功消费通常包含三个阶段:客户接收消息.客户处理消 ...

  10. 191112Django fbv和cbv

    cbv:类.base.view fbc:函数.base.view from django.contrib import admin from django.urls import path from ...