我们一起学习WCF 第三篇头消息验证用户身份
前言:今天我主要写的是关于头消息的一个用处验证用户信息
下面我画一个图,可以先看图
第一步:我们先开始做用户请求代码
首先:创建一个可执行的上下文对象块并定义内部传输的通道
using (OperationContextScope scope = new OperationContextScope(userClient.InnerChannel))
然后:创建头消息 要发送的SOAP传输的内容
MessageHeader myHeaderUid = MessageHeader.CreateHeader(
"header", "uid", UId);
header:标头 XML 元素的本地名称(名字可以任意取,但是必须和服务器端保持一致)
uid:标头 XML 元素的命名空间 URI(名字可以任意取,但是必须和服务器端保持一致)
UId:要传送的信息(是一个object类型的值)
最后:把创建要传输的头内容添加到传输的对象中
OperationContext.Current.OutgoingMessageHeaders.Add(myHeaderUid);
ok这样就完成客户端的编码
ValidUserClient userClient =new ValidUserClient();
while (true)
{
Console.Write("用户名:");
string UId = Console.ReadLine();
Console.Write("密码:");
string Pwd = Console.ReadLine();
using (OperationContextScope scope = new OperationContextScope(userClient.InnerChannel))//创建一个可执行的上下文对象块并定义内部传输的通道
{
MessageHeader myHeaderUid = MessageHeader.CreateHeader(
"header", "uid", UId);
MessageHeader myHeaderPwd= MessageHeader.CreateHeader(
"header", "pwd", Pwd);
OperationContext.Current.OutgoingMessageHeaders.Add(myHeaderUid);
OperationContext.Current.OutgoingMessageHeaders.Add(myHeaderPwd);
Console.WriteLine(userClient.User());
}
}
客户端编码
第二步:服务端编码
首先:开始检索头消息
int uIdIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader("header", "uid");(注意保持与客户端的保持一致,得到的是索引也就是头信息位置(如果index=-1就表示没有头消息))
Dictionary<string,string> AllUsers =new Dictionary<string, string>();
public bool User()
{
InsertUser();//模拟数据库动态添加用户
string Uid = string.Empty;
string Pwd = string.Empty;
bool result = false;
int uIdIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader("header", "uid");
int pwdIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader("header", "pwd");
if (uIdIndex != -)
{
Uid = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(uIdIndex);
}
if (pwdIndex!=-)
{
Pwd = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(pwdIndex);
}
if (AllUsers.ContainsKey(Uid))
{
if (AllUsers[Uid] == Pwd)
{
result = true;
} }
return result;
} private void InsertUser()
{
AllUsers.Add("admin","");
AllUsers.Add("sa","");
AllUsers.Add("ldc","");
AllUsers.Add("zd","");
}
服务端编码
这样就简单的把头消息验证用户完成了,我写的有很多不好的地方大家看到了可以提出来,共同学习。下一篇着手写消息协定和数据协定。
我们一起学习WCF 第三篇头消息验证用户身份的更多相关文章
- [老老实实学WCF] 第三篇 在IIS中寄存服务
老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...
- RabbitMQ学习总结 第三篇:工作队列Work Queue
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- 学习KnockOut第三篇之List
学习KnockOut第三篇之List 欲看此篇---------------------------------------------可先看上篇. 第一步,先搭建一个大概的框架起来 ...
- (转) [老老实实学WCF] 第三篇 在IIS中寄存服务
第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生 ...
- Egret入门学习日记 --- 第三篇 (书中 3.4 内容)
第三篇 (书中 3.4 内容) 今天还是要把昨天项目运行后,EXML文件里的界面没有出现的问题解决了才行. 去了群里,没人回.去了官网看文档,看不懂. 不过倒是看到了一个好东西: 还挺便宜啊,一个月要 ...
- 我们一起学习WCF 第五篇数据协定和消息协定
A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每个参数或 ...
- 我们一起学习WCF 第六篇文件传输
原文 http://www.cnblogs.com/LipeiNet/p/4653830.html 前言:文件的输出我们并不陌生,但是今天我写的是用wcf模式进行文件传输,我觉得一大好处就是能进 ...
- 我们一起学习WCF 第十篇Wcf中实现事务
数据一致性在工作中显得非常重要,有时候我们库中出现脏数据导致程序报错,但是又很难发现这样的错误,所以为了数据的完整性建议在程序中加入事物. 什么是事物:我们都有团队合作吧,比喻团队有3个人,a负责设计 ...
- 我们一起学习WCF 第四篇单通讯和双向通讯
前言:由于个人原因很久没有更新这个系列了,我会继续的更新这系列的文章.这一章是单向和双向通讯.所谓的单向就是只有发送却没有回复,双向是既有发送还有回复.就是有来无往代表单向,礼尚往来表示双向.下面我用 ...
随机推荐
- Redis入门(一)---安装
一.Ubuntu安装 1.命令行安装 sudo apt-get install redis-server 2.启动redis服务(安装完成后自动启动) sudo /etc/init.d/redis-s ...
- POJ 2524 独一无二的宗教(裸并查集)
题目链接: http://poj.org/problem?id=2524 Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K ...
- linux crontab 计划任务设置 (简结)
命令: crontab -l 查看当前运行的计划任务 crontab -e 编辑当前运行计划任务 修改或添加 VIM编辑器用法:按 i 键进入编辑文本状态, esc 结束编辑状态 , :wq ...
- jdk1.8换成1.7
电脑中装了jdk1.7,然后又装了1.8, 后来项目需要1.7,就把path环境变量中的java_home改成了1.7. 然后控制台输入java_version,后提示如下: Error: Regis ...
- 安装mysql时出现initialize specified but the data directory has files in in.Aborting.该如何解决
eclipse中写入sql插入语句时,navicat中显示的出现乱码(???). 在修改eclipse工作空间编码.navicate中的数据库编码.mysql中my.ini中的配置之后还是出现乱码. ...
- ubuntu 安装linux 下vmVMware tools 步骤及问题解决
一. 菜单栏 “虚拟机” ——> “设置 ” 使用linux.so镜像文件 此文件在vmware workstation 的安装目录.并且打开CD/DVD的连接. 二.终端 ...
- 前端解析zip文件
使用jszip.js,read.js. 传入fileinput选中的文件对象 function handleFile(f) { JSZip.loadAsync(f) .then(function(zi ...
- cookie、localstorage、sessionstorage区别
localstorage sessionsorage cookie 大小 浏览器不能保存超过300个cookie,单个服务器不能超过20个,每个cookie不能超过4k 可以达到5M 可以达到5M ...
- linux-2.6.22.6内核启动分析之head.S引导段代码
学习目标: 了解arch/arm/kernel/head.S作为内核启动的第一个文件所实现的功能! 前面通过对内核Makefile的分析,可以知道arch/arm/kernel/head.S是内核启动 ...
- Python实现注册和三次验证登录
# 帐户表account:# sylar:123# alex:456# wusir:789# taibai:789# 需熟练的知识点:文件操作with open()/write()/read().去掉 ...