博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
监控webservice信息
阅读量:6433 次
发布时间:2019-06-23

本文共 1884 字,大约阅读时间需要 6 分钟。

由于wince中对wcf的支持不是很好,所有还有需要用到传统的webservice,wince6.0和webservice通信的过程中,有时候在信号不是很稳定的情况下,容易出现“无法从传输连接中获取数据”的异常信息,因为在调试的过程中一直信号都很稳定,这就给发现原因提供了一定的困难,通过异常日志的记录,居然发现HTTP返回的状态是204(返回成功但内容为空),觉得很奇怪,明知我返回的内容不为空,但确返回此异常,并且这种提示信息让客户特别反感,带着这种疑问,于是想记录下客户端和服务器端webservice序列化成xml后在通信的过程中到底是发送了什么和接收了什么。

记录webservice序列化成xml的数据并不难,只要在webservice中添加soap扩展soapextension类的实现就行了,主要用到的方法是ChainSream和ProcessMessage

其中ProcessMessage(SoapMessage message)有四个阶段:

SoapMessageStage.BeforeDeserialize(反序列化前)、SoapMessageStage.BeforeSerialize(序列化前)、SoapMessageStage.AfterSerialize(序列化后)和SoapMessageStage.AfterDeserialize(反序列化后)

在使用过程中,需要注意以下几点:

1.不同优先级的Soap扩展在Soap消息传输的不同阶段其调用顺序是不一样的,具体可以分为两个阶段:即Serialize阶段,其调用是按照Soap扩展的优先级从低到高执行的,

在Deserialize阶段,其调用是按照Soap扩展优先级从高到低执行的。

2.ChainStream的调用是按照Soap扩展的高优先级到低优先级的调用顺序依次调用的,被执行四次.

3.离从网络传输层近的是高优先级的。并且在整个序列化和反序列化的过程中经测试为先执行chainstream然后才会执行processmessage()

4.soapextension类可能通过SoapExtensionAttribute属性类调用(针对每一个方法)也可以通过全局配置web.config,app.config配置整个使用,但由于wince不支持全局配置,故只能单个方法属性定义

5.在反序列化过程中由于会从网络传输层中首先获取数据,因此其soapmessage.stream是不为空的,而序列化则为空,需要通过在chainstream设置一缓冲区让其填充数据

别外soapextension还有三个方法:

 

//设置初始化属性(全局配置时使用)

public override object GetInitializer(Type serviceType)

{
return System.Web.HttpContext.Current.Request.MapPath(".")+"\\log.txt";
}

//获取SoapExtensionAttribute 调用时的属性(属性调用时使用)

public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)

{
       return ((ExtensionAttribute)attribute).Filename;
}

//得到GetInitializer()设置的属性

public override void Initialize(object initializer)

{
filename = (string)initializer;
}

全局config的配置代码为:

<webServices>

<soapExtensionTypes>
<add type="LYErp.MyExtension,LYErp" priority="1" group="High"/>
</soapExtensionTypes>

此例子只是记录了webservice序列化成xml的相关数据,可以用来进行测试和对xml进行加密,压缩等操作。

例子程序:

http://download.csdn.net/detail/jj516585042/4941845 

 

转载于:https://www.cnblogs.com/fujinliang/archive/2012/12/28/2837639.html

你可能感兴趣的文章
聊聊lombok构造模式的参数校验
查看>>
Linux基础学习—2
查看>>
iOS技巧之获取本机通讯录中的内容,解析通讯录源代码
查看>>
程序员从零到月薪15K的转变,python200G资料分享
查看>>
DNS域名解析的知识了解
查看>>
部署社交网站
查看>>
CentOS下如何修改主机名
查看>>
“机器人商店”是什么?卖机器人的吗?
查看>>
SVN的代码正确提交方法
查看>>
js框架 vue
查看>>
tomcat关闭时进程未退出
查看>>
Git分支管理策略
查看>>
给每一辆车配上“×××”,老牌安企高新兴的交通新作
查看>>
VLAN与Trunk的配置
查看>>
瞎写 论售后服务
查看>>
求四边形的数量
查看>>
1111
查看>>
opencart,mycncart,google字体本地化详细处理方法。包括前后台。
查看>>
个人知识管理软件:Midear Note
查看>>
rpm安装软件包
查看>>