C#静态调用带有SoapHeader验证的WebServices
转自:http://blog.csdn.net/u012995964/article/details/54562111
本文记录带有SoapHeader验证的WebServices服务创建、部署及C#中的静态调用方法,基于 Windows8.1
、Visual Studio 2013
、IIS8
环境实现。
WebServices服务创建
Visual Studio 2013中创建WebServices
- 创建一个空的
ASP.NET Web 应用程序
: - 创建 WebService 服务的程序(asmx格式)文件:
首次右键“添加”时,看不到图中所示的 “Web 服务(ASMX)” ,可以点击“新建项(W)”来实现创建:
- 到此 WebService 服务创建完成,可以看到如下基础代码:
- 快捷键
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学习,可以看这里:
- w3school 提供的系列教程
- MSDN的ASP.NET XML Web services 基础知识
关于IIS Express和本地IIS服务的一些介绍比较,可以看这里
C#静态调用带有SoapHeader验证的WebServices的更多相关文章
- C#动态调用带有SoapHeader验证的WebServices
http://blog.csdn.net/u012995964/article/details/54573143 本文记录C#中通过反射动态的调用带有SoapHeader验证的WebServices服 ...
- 带SoapHeader验证的WebServices
一般在项目中,制作的都是基于SOAP协议的webservices,其描述语言是WSDL.但是有时候在项目中,需要保证webservices的安全,需要对其进行进行验证,那么我们就要实现SoapHead ...
- HTML中调用带有SoapHeader头的WebService的两种方法
第一种: function CallWebMethodWithHeader() { var soapXML = "<soap:Envelope xmlns:xsi='http://ww ...
- C#调用Java的WebService添加SOAPHeader验证(2)
C#调用Java的WebService添加SOAPHeader验证 上一篇链接如上,更像是 Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) 来处理xml, ...
- C#调用Java的WebService添加SOAPHeader验证
C#调用Java的WebService添加SOAPHeader验证(2) 1.问题描述 调用的Java的webservice string Invoke(string func, string req ...
- .net 客户端调用java或.net webservice进行soapheader验证
.net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...
- C#/PHP调用有SoapHeader的WebService
日前调用第三方WebService接口时遇到了SoapHeader验证的问题,记录一下解决方法. 接口需要的格式: <soapenv:Header> <ReqSOAPHeader x ...
- java servlet调用带有多个返回结果集的存储过程
一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要 ...
- .net 在不同情况下调用带soapheader的webservice的方式
国庆长假到了,本想出去玩玩,无奈自己屌丝一枚,啥都没有,只能自己宅在家里思考思考人生.不过人生还是过于复杂,一时间也想不出个所以然,只能是整理一下在工作中遇到的一些小问题,首先是关于带soaphead ...
随机推荐
- sys.argv的意义及用法
sys.argv的意义 简单来说,sys.argv是一个参数列表,这个列表存放着从外界获取到的参数(可能有多个) 下面以一个例子来详细阐述sys.argv,本次演示在ubuntu环境下运行 新建一个t ...
- nginx命令和配置
centos 6.8安装的nginx 1.12.2 1.nginx常用的命令 使用nginx命令前,进入到/usr/local/nginx/sbin/目录 1)查看nginx版本 进入到/usr/lo ...
- List集合的三个实现类比较
1. ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 2. Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 3. LinkedList 底层数据结构是链 ...
- css之页面透明
能使元素变的透明的方法有: 1.Opacity 2.RGBA opacity会使后代元素都透明,而RGBA不会!
- maven安装问题解决
出现: The JAVA_HOME environment variable is not defined correctly This environment variable is needed ...
- k8s中flannel:镜像下载不了
重新部署一套K8S集群时,由于K8S需要扁平化的网络,所以当执行下面的 root@master ~]# kubectl apply -f kube-flannel.yml 会开始下载镜像,然后去启动, ...
- sql in条件 超过1000字符的处理方法
private string getOracleSQLIn(string[] ids, string field) { int count = Math.Min(ids.Length, 1000); ...
- AcWing:139. 回文子串的最大长度(字符串Hash + 前缀和 + 后缀和 + 二分)
如果一个字符串正着读和倒着读是一样的,则称它是回文的. 给定一个长度为N的字符串S,求他的最长回文子串的长度是多少. 输入格式 输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个 ...
- linux 文件目录介绍
网上的资源 太多了,copy 过来 留给自己用吧! 摘自 : http:/ 使用linux也有一年多时间了 最近也是一直在维护网站系统主机 下面是linux目录结构说明 本人使用的是centos系 ...
- servlet3.0以后可以不用web.xml配置了
AbstractDispatcherServletInitializer 注意:删除了web.xml会报错,web.xml is missing and <failOnMissingWebXml ...