我在PC上創建了一個名爲PC1的WCF服務器。我使用來自另一臺名爲PC2的PC的Internet Explorer訪問URI http://PC1:8000/ServiceModelSamples/Service。爲什麼WCF通信是一個tcp,即使我在URI中說http?
當我在Wireshark中調試消息時,我很困惑,爲什麼沒有HTTP消息,即使我在我的URI中指定「http://」。它只顯示TCP協議,沒有HTTP消息或頭。
請指教
我在PC上創建了一個名爲PC1的WCF服務器。我使用來自另一臺名爲PC2的PC的Internet Explorer訪問URI http://PC1:8000/ServiceModelSamples/Service。爲什麼WCF通信是一個tcp,即使我在URI中說http?
當我在Wireshark中調試消息時,我很困惑,爲什麼沒有HTTP消息,即使我在我的URI中指定「http://」。它只顯示TCP協議,沒有HTTP消息或頭。
請指教
對於wireshark,任何瀏覽器請求只是另一個TCP連接。就顯示HTTP協議細節而言,可能會猜測特定端口(80)上的流量將是http。由於您使用的是非標準的http端口,因此可能無法這樣做。
要確認這一點,請嘗試加載一些其他網站/網頁(例如www.google.com)並查看它是否能夠向您顯示http詳細信息。如果可行,那麼接下來的事情就是嘗試找到一些設置/配置,通過這些設置/配置,你可以告訴wireshark它應該將來自另一個端口(您的情況爲8000)的流量視爲http流量。
編輯:
見this question爲導向,以用於HTTP端口配置Wireshark的。
HTTP是位於傳輸層協議TCP之上的應用層協議。
有關更多信息,請參閱http://en.wikipedia.org/wiki/TCP/IP_model。
當您使用瀏覽器訪問服務時,「友好」服務響應爲您的瀏覽器生成Web表單。如果您在瀏覽器中收到網頁,則其爲 HTTP。這不是「SOAP」規範的一部分,但它是支持HTTP的MS WCF棧的一部分。
然後,如果填寫完畢,您可能正在發佈或獲取表單,但POST是默認設置。這也是HTTP。 WCF中經常禁用GET。
然後,您在瀏覽器中找回XMLish的東西,這也是通過HTTP獲取的。
所以你可能會錯過wireshark中的HTTP協議解碼。
編輯:我沒有看到您的網址包括:8000。 Wireshark將不會將其解碼爲HTTP,除非您強制它,因爲它不在HTTP端口上。你可以右鍵單擊一個8000端口的數據包,然後說「關注對話」,你會看到所有的http善良。您還可以強制wireshark將該流解碼爲HTTP,這將允許您「穿透」TCP層的數據包。
如果您只想查看HTTP消息的內容,Fiddler可能比Wireshark更易於使用:http://fiddler2.com – 2011-03-23 17:12:12