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

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

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

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

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就表示没有头消息))

然后:通过索引来获取头消息内容
      Uid = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(uIdIndex);
最后:我们就进行逻辑判断
   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 第三篇头消息验证用户身份的更多相关文章

  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常用库之三:Matplotlib

    导入模块 import matplotlib.pyplot as plt import seaborn as sb 绘制条形图 countplot(data:数据集, x:x坐标轴, color:条形 ...

  2. MyBatis(3)-映射文件

    本次博文有疑问,请先看MyBatis(1)-简单入门 和 MyBatis(2)-全局配置文件! 如在有疑问,请留言或者咨询博主,博主每天都在!谢谢! 映射文件: 主要是在xxxmapper.xml文件 ...

  3. selenium + python自动化测试unittest框架学习(三)webdriver对页面其他控件操作(三)

    1.对话框,下拉框 (1)对话框的有两种,一种是iframe格式的,需要switch_to_iframe()进行定位,现在大部分的对话框是div格式的,这种格式的可以通过层级定位来定位元素,先定位对话 ...

  4. idea 注册码(2019)

    MTW881U3Z5-eyJsaWNlbnNlSWQiOiJNVFc4ODFVM1o1IiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...

  5. PyTorch Softmax

    PyTorch provides 2 kinds of Softmax class. The one is applying softmax along a certain dimension. Th ...

  6. PAT——1055. 集体照

    拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下: 每排人数为N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何人矮: 每排中最高者站中间(中间位置为m ...

  7. HDU Virtual Friends(超级经典的带权并查集)

    Virtual Friends Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. TTL电平, RS232电平以及CMOS电平的区别

    TTL电平标准 输出 L: <0.8V : H:>2.4V. 输入 L: <1.2V : H:>2.0V TTL器件输出低电平要小于0.8V,高电平要大于2.4V.输入,低于1 ...

  9. 寻找最小的k个数(四种方法)

    1 使用从大到小的优先队列保存最小的K个数,每次取出K个数之后的其余数和堆顶元素比较,如果比堆顶元素小,则将堆顶元素删除,将该元素插入 void topK(int arr[],int n,int k) ...

  10. HTML5与CSS3网页设计

    <!--一个网页的基本结构写法--> <!doctype html> <html> <head>//头部 <title>标题</tit ...