前言:今天我主要写的是关于头消息的一个用处验证用户信息

下面我画一个图,可以先看图

第一步:我们先开始做用户请求代码

首先:创建一个可执行的上下文对象块并定义内部传输的通道

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>();
  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 != -)
  11. {
  12. Uid = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(uIdIndex);
  13. }
  14. if (pwdIndex!=-)
  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","");
  32. AllUsers.Add("sa","");
  33. AllUsers.Add("ldc","");
  34. AllUsers.Add("zd","");
  35. }

服务端编码

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

源码下载

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

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

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

  2. RabbitMQ学习总结 第三篇:工作队列Work Queue

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  3. 学习KnockOut第三篇之List

    学习KnockOut第三篇之List 欲看此篇---------------------------------------------可先看上篇.          第一步,先搭建一个大概的框架起来 ...

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

    第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生 ...

  5. Egret入门学习日记 --- 第三篇 (书中 3.4 内容)

    第三篇 (书中 3.4 内容) 今天还是要把昨天项目运行后,EXML文件里的界面没有出现的问题解决了才行. 去了群里,没人回.去了官网看文档,看不懂. 不过倒是看到了一个好东西: 还挺便宜啊,一个月要 ...

  6. 我们一起学习WCF 第五篇数据协定和消息协定

    A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每个参数或 ...

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

    原文  http://www.cnblogs.com/LipeiNet/p/4653830.html   前言:文件的输出我们并不陌生,但是今天我写的是用wcf模式进行文件传输,我觉得一大好处就是能进 ...

  8. 我们一起学习WCF 第十篇Wcf中实现事务

    数据一致性在工作中显得非常重要,有时候我们库中出现脏数据导致程序报错,但是又很难发现这样的错误,所以为了数据的完整性建议在程序中加入事物. 什么是事物:我们都有团队合作吧,比喻团队有3个人,a负责设计 ...

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

    前言:由于个人原因很久没有更新这个系列了,我会继续的更新这系列的文章.这一章是单向和双向通讯.所谓的单向就是只有发送却没有回复,双向是既有发送还有回复.就是有来无往代表单向,礼尚往来表示双向.下面我用 ...

随机推荐

  1. [Python 网络编程] makefile (三)

    socket.makefile(mode ='r',buffering = None,*,encoding = None,errors = None,newline = None )返回一个与套接字相 ...

  2. mean函数一个神代码

    cs231n上的一个代码,能求出准确率: print 'accuracy: %f' % ( np.mean(Yte_predict == Yte) ) >>> a = np.arra ...

  3. zookeeper学习记录第二篇-----安装、配置、启动

    搭建zk集群,起码保证3台虚拟机的配置,本人使用的虚拟机环境为wm14+centos7+jdk1.8 下载地址 zk的tar包下载地址:http://mirror.bit.edu.cn/apache/ ...

  4. Oracle ddl 和 dml 操作

      ddl 操作 窗口设置用户权限的方法  Oracle的数据类型  按住Ctrl点击表名 ,可以鼠标操作  插入的数据需要满足创建表的检查  主表clazz删除数据从表设置级联也会一同删除 有约束也 ...

  5. iOS之LLDB调试器

    LLDB被定位为下一代的高性能调试器,默认内置于Xcode IDE内, 支持在PC.iOS设备以及模拟器上调试C.Objective-C和C++. 关于LLDB的官方介绍:LLDB 常用命令: 1.  ...

  6. c#将List转换成DataTable(采用Emit)

    前段时间通过网上查找,使用emit将Datatable,DataReader转换成List<T>了.这是从数据库到展示. 但是最近整理Hikari(我写的数据库连接池),发现c#里面数据库 ...

  7. 追溯了解Ubuntu之安装操作步骤(贰)

    1.首先从官网中下载32位或64位安装程序: 2.下载安装包后不需要解压:直接双击即可:在里面可以看到wubi.exe应用程序,双击打开: 如果之前已经安装过需要卸载重新安装: 3.目标驱动器是安装的 ...

  8. HTML5之拖拽

    HTML5拖放 拖放(Drag和drop)是H5标准的组成部分 此处需具备js基础知识及其H5拖拽部分相关方法 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发 ...

  9. MongoDB基础命令及操作

    MongoDB:NoSQL数据库 MongoDB中的重要指示点 MongoDB中的三要素 数据库 集合 文档 MongoDB中的数据存储是以Bson的形式存储的,Bson是二进制的json,所以看上去 ...

  10. Linux下更新git版本

    查看git版本,卸载旧版本(如果没有安装git请直接到下一步) git --version yum remove git 安装依赖软件 yum install curl-devel expat-dev ...