惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Register - Security
The Register - Security
IT之家
IT之家
博客园_首页
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
博客园 - Franky
C
Check Point Blog
T
The Blog of Author Tim Ferriss
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
美团技术团队
The Cloudflare Blog
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
V
V2EX
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
G
Google Developers Blog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
U
Unit 42
罗磊的独立博客
量子位
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
D
Docker
人人都是产品经理
人人都是产品经理

博客园 - lbq1221119

时间同步算法与Simple Ring-based election algorithm算法分析 SSCLI中GC垃圾回收源码分析(3) - GarbageCollectGeneration()与SuspendEE SSCLI中GC垃圾回收源码分析(2) - GarbageCollect()与Spin Lock SSCLI中GC源码分析(1) - EE与BCL之间的调用接口FCall (北京宇思信德科技公司)诚聘C#软件工程师 , Middle及Senior Level .Net Micro framework在开发过程中的bugs/problems及解决方案。 MF中使用GPRS:如何通过一个串口终端实现GPRS Modem拨号上网 博客园北京俱乐部第三次活动讲义PPT ValueType.Equals(null)的底层实现及CLR虚拟机对其结构支持 托管线程退出之后Dump文件特征 国外精品研究论文(持续更新) Random()中具体实现(含种子数组的实现) From double Click to Main: PAL initialization - lbq1221119 From double Click to Main: The initialization of Process in OS Microsoft Micro Framework 3.0对Serial Peripheral Interface 的支持 使用CorDbg进行托管调试 CLR内核调试之:Malloc函数实现 Build SSCLI20 under VS2008 full Document (完全手册) MethodTable内存空间分配中加法运算算法解析
WebService传输数据流及数据交互解析
lbq1221119 · 2009-01-08 · via 博客园 - lbq1221119

key words:DPWS,嵌入式设备,WebService,Http,嗅探,Micro Framework。。

为了实现一个嵌入式设备和一个host在IIS server上面的WebService交互,使用了MF3.0里面的DPWS方法。不过这个东西实在是Hard to use。今天就记录下使用的过程中的第一步,首先分析一个Client和一个Webservice是如何交互的,发送的数据流的格式,然后在Device里面封装一下Soap头用httpClient发送出去。

这里用到了WireShark来分析网络交互的数据包。

首先定义一个运行在IIS上面的简单的WebService:

namespace Cashfree.Vending.Web.WebService
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class IISWS : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello Robin";
        }

        [WebMethod]
        public int add(int a, int b)
        {
            return a + b;
        }
    }
}

然后定义一个Client来访问这个Webservice:

namespace Cashfree.Vending.IISWSInvoke
{
    class Program
    {
        static void Main(string[] args)
        {
            ISWSSoapClient isClient = new ISWSSoapClient();           
            Console.WriteLine(isClient.add(2, 3));
        }
    }
}

接着,发布好Webservice之后,编译Client文件,然后找到Client的exe文件。

这个时候打开WireShark,监视网卡上面发送的数据流,设置过滤,格式如下:

(ip.addr eq 10.10.20.33 and ip.addr eq 192.168.0.100) and (tcp.port eq 1795 and tcp.port eq 8088)

双击Client端访问IIS上面的Webservice,然后得到下面的一个数据包列表:

clip_image002

这就得到了一个完整的交互过程,从下往上,最左边的一列是frame id。

我把着几个frame,199到122解析出来得到了下面的格式:

image

首先是客户端发送一个请求到iis的服务器上面,请求的地址是:/WebService/IISWS.asmx,这里是支持http1.1的。

然后连接类型是一直保持连接。

image

这是Server回的一个ACK到Client来保持连接。同时标识连接通了。

image

然后Client端开始发送请求调用IIS上面的服务了,传递了两个参数:

a=2,b=3;

封装之后,有一个头部和一个body。Envelope在MF2.5的时候,有类库直接对应SOAP的头和Body。3.0的时候找XMLDocument找了N久没找到,MDSN上面明明写的是有的。但是这个地方如果使用MF来解析的话,可以调用XMLReader来实现。只不过比较麻烦,只是提供了最基础的XML访问的方法,需要一个节点一个节点的找。

image

服务器端首先回一个ACK,然后跟着一个XMl文件表示调用的结果:

<addResult>5</addResult>

这里,俺们知道了传输的数据格式之后,就可以把Soap message封装好了之后直接传输给Server了。

Thursday, January 08, 2009