程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> WebService傳輸數據流及數據交互解析

WebService傳輸數據流及數據交互解析

編輯:關於C#

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,然後得到下面的一個數據包列表:

這就得到了一個完整的交互過程,從下往上,最左邊的一列是frame id。

我把著幾個frame,199到122解析出來得到了下面的格式:

首先是客戶端發送一個請求到iis的服務器上面,請求的地址是:/WebService/IISWS.asmx,這裡是支持http1.1的。

然後連接類型是一直保持連接。

這是Server回的一個ACK到Client來保持連接。同時標識連接通了。

然後Client端開始發送請求調用IIS上面的服務了,傳遞了兩個參數:

a=2,b=3;

封裝之後,有一個頭部和一個body。Envelope在MF2.5的時候,有類庫直接對應SOAP的頭和Body。3.0的時候找XMLDocument找了N久沒找到,MDSN上面明明寫的是有的。但是這個地方如果使用MF來解析的話,可以調用XMLReader來實現。只不過比較麻煩,只是提供了最基礎的XML訪問的方法,需要一個節點一個節點的找。

服務器端首先回一個ACK,然後跟著一個XMl文件表示調用的結果:

<addResult>5</addResult>

這裡,俺們知道了傳輸的數據格式之後,就可以把Soap message封裝好了之後直接傳輸給Server了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved