我们一起学习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这样就完成客户端的编码

 1  ValidUserClient userClient =new ValidUserClient();
 2             while (true)
 3             {
 4                 Console.Write("用户名:");
 5                 string UId = Console.ReadLine();
 6                 Console.Write("密码:");
 7                 string Pwd = Console.ReadLine();
 8                 using (OperationContextScope scope = new OperationContextScope(userClient.InnerChannel))//创建一个可执行的上下文对象块并定义内部传输的通道
 9                 {
10                     MessageHeader myHeaderUid = MessageHeader.CreateHeader(
11                       "header", "uid", UId);
12                     MessageHeader myHeaderPwd= MessageHeader.CreateHeader(
13                            "header", "pwd", Pwd);
14                     OperationContext.Current.OutgoingMessageHeaders.Add(myHeaderUid);
15                     OperationContext.Current.OutgoingMessageHeaders.Add(myHeaderPwd);
16                     Console.WriteLine(userClient.User());
17                 }
18             }

客户端编码

第二步:服务端编码

首先:开始检索头消息

int uIdIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader("header", "uid");(注意保持与客户端的保持一致,得到的是索引也就是头信息位置(如果index=-1就表示没有头消息))

然后:通过索引来获取头消息内容

Uid = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(uIdIndex);

最后:我们就进行逻辑判断

 1   Dictionary<string,string> AllUsers =new Dictionary<string, string>(10);
 2        public bool User()
 3        {
 4            InsertUser();//模拟数据库动态添加用户
 5            string Uid = string.Empty;
 6            string Pwd = string.Empty;
 7            bool result = false;
 8            int uIdIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader("header", "uid");
 9            int pwdIndex = OperationContext.Current.IncomingMessageHeaders.FindHeader("header", "pwd");
10            if (uIdIndex != -1)
11            {
12                Uid = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(uIdIndex);
13            }
14            if (pwdIndex!=-1)
15            {
16                Pwd = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(pwdIndex);
17            }
18            if (AllUsers.ContainsKey(Uid))
19            {
20                if (AllUsers[Uid] == Pwd)
21                {
22                    result = true;
23                }
24
25            }
26            return result;
27        }
28
29        private void InsertUser()
30        {
31            AllUsers.Add("admin","123456");
32            AllUsers.Add("sa","123456");
33            AllUsers.Add("ldc","123456");
34            AllUsers.Add("zd","123456");
35        }

服务端编码

这样就简单的把头消息验证用户完成了,我写的有很多不好的地方大家看到了可以提出来,共同学习。下一篇着手写消息协定和数据协定。

源码下载

时间: 2024-11-25 13:45:24

我们一起学习WCF 第三篇头消息验证用户身份的相关文章

[老老实实学WCF] 第三篇 在IIS中寄存服务

原文:[老老实实学WCF] 第三篇 在IIS中寄存服务 老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生命周期有了一个最基本的了解. 在前两篇中演示的例子,一定要力求背着做下来,包括源程序.配置文件都要背着一行行的手写下来,这样才能有深刻的体会.WCF的知识零散复杂,必须扎扎实实的学习和练习.如果你还没有做到了然于胸,现在赶紧翻

老老实实学WCF[第三篇] 在IIS中寄宿服务

老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生命周期有了一个最基本的了解. 在前两篇中演示的例子,一定要力求背着做下来,包括源程序.配置文件都要背着一行行的手写下来,这样才能有深刻的体会.WCF的知识零散复杂,必须扎扎实实的学习和练习.如果你还没有做到了然于胸,现在赶紧翻回去把例子再做一遍. 今天让我们稍微深入一点,了解一些关

(转) [老老实实学WCF] 第三篇 在IIS中寄存服务

第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生命周期有了一个最基本的了解. 在前两篇中演示的例子,一定要力求背着做下来,包括源程序.配置文件都要背着一行行的手写下来,这样才能有深刻的体会.WCF的知识零散复杂,必须扎扎实实的学习和练习.如果你还没有做到了然于胸,现在赶紧翻回去把例子再做一遍. 今天让我们稍微深入一点,了解一些关于寄宿的新知识:在

学习KnockOut第三篇之List

欲看此篇---------------------------------------------可先看上篇. 第一步,先搭建一个大概的框架起来.至于绑定什么的,我们稍后慢慢进行.可能会有人问为什么我那个位置要写一个form,关于这个呢,且埋一伏笔,稍后说明原由. 我们要做的是,当点击“Add”按钮时能将文本框里的值加入的下拉框里,当我们选中下拉框里的选项时点击"Remove"也能进行删除操作,同样,当点击“Sort”时也能对下拉框里的选项进行排序.有代码和图: 1 <!DOCT

我们一起学习WCF 第五篇数据协定和消息协定(附上源码)

A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每个参数或返回类型精确定义为进行交换而序列化哪些数据(将哪些数据转换为 XML)摘自MSDN)也就说数据协定是客户端和服务端之间达成的数据协议,相互通信的参数会被序列化然后进行传输.那么我用图来表示为什么用数据协定. 下面用图来说明其几个用处 那么下面我们来看看数据协定的代码实现 1:创建一个协定类 1 [D

第三篇之消息的收发

前一篇文章里我们已经把微信公众平台接口中消息及相关操作都进行了封装,本章节将主要介绍如何接收微信服务器发送的消息并做出响应. 明确在哪接收消息 从微信公众平台接口消息指南中可以了解到,当用户向公众帐号发消息时,微信服务器会将消息通过POST方式提交给我们在接口配置信息中填写的URL,而我们就需要在URL所指向的请求处理类CoreServlet的doPost方法中接收消息.处理消息和响应消息.   接收.处理.响应消息 下面先来看我已经写好的CoreServlet的完整代码: [java] vie

我们一起学习WCF 第六篇文件传输

原文? http://www.cnblogs.com/LipeiNet/p/4653830.html ? 前言:文件的输出我们并不陌生,但是今天我写的是用wcf模式进行文件传输,我觉得一大好处就是能进行服务器的监听.ok,现在来看看文件传输需要什么:第一需要传输的信息(文件名,流等)第二需要传输状态(是否传输成功,传输失败返回的信息)下面用图详细的表示下 第一步:先定义两个类 1 [MessageContract] 2 public class ResultMessage 3 { 4 [Mess

我们一起学习WCF 第十篇Wcf中实现事物

数据一致性在工作中显得非常重要,有时候我们库中出现脏数据导致程序报错,但是又很难发现这样的错误,所以为了数据的完整性建议在程序中加入事物. 什么是事物:我们都有团队合作吧,比喻团队有3个人,a负责设计,b负责前端,c负责后台,那么他们三个就是一个整体,哪一个人那里出了问题就要被打回. 第一步:我们开始定义个一个接口 [ServiceContract] public interface IUserInfo { [OperationContract] int AddInfo(); } 第二步当然是实

我们一起学习WCF 第四篇单通讯和双向通讯

前言:由于个人原因很久没有更新这个系列了,我会继续的更新这系列的文章.这一章是单向和双向通讯.所谓的单向就是只有发送却没有回复,双向是既有发送还有回复.就是有来无往代表单向,礼尚往来表示双向.下面我用一个简单用例图表示一下(其中一个老师很严厉说的话大家都默默接受,另一个则相反) 首先我们先看单向通讯: 第一步:编写服务协定 1 [ServiceContract(Namespace = "singleTrans")] 2 public interface ITeacher 3 { 4 [