在WCF中一些基于HTTP之上的綁定可以用TcpTrace跟蹤消息。借助此工具可以使我們有機(jī)會了解一些功能的工作方式,如可靠性會話在網(wǎng)絡(luò)斷開的情況下是如何向服務(wù)端發(fā)送消息。
TcpTrace的界面非常簡潔,簡潔的有點(diǎn)讓人不知所措。
Listen on Port:TcpTrace要監(jiān)聽的本機(jī)端口
Destination Server:對TcpTrace監(jiān)聽的端口的任何訪問都將轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器
Destination Port:對TcpTrace監(jiān)聽的端口的任何訪問都將轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器的這個端口
如在瀏覽地址欄輸入: http://127.0.0.1:8080 或者 http://localhost:8080 ,將會自動轉(zhuǎn)發(fā)到對 http://www.google.com:80 的訪問,
結(jié)果如圖:
簡單的了解了下TcpTrace如何工作的,下面寫個實(shí)例來演示用它如何跟蹤WCF消息。
實(shí)體類:
using System.ServiceModel;
using System.Runtime.Serialization;
namespace FruitModel
{
[DataContract(Namespace = " http://www.cnblogs.com/qiuwuyu " )]
public class Fruit
{
private string m_Name;
private string m_Price;
[DataMember]
public string Name
{
get { return m_Name; }
set { m_Name = value;}
}
[DataMember]
public string Price
{
get { return m_Price; }
set { m_Price = value;}
}
}
}
服務(wù)契約:
using System.ServiceModel;
using FruitModel;
namespace IFruit
{
[ServiceContract(Namespace = " http://www.cnblogs.com/qiuwuyu " )]
public interface IFruitService
{
[OperationContract]
Fruit GetFruit();
}
}
服務(wù)實(shí)現(xiàn):
using System;
using FruitModel;
using IFruit;
namespace FruitSvc
{
public class FruitService:IFruitService
{
public Fruit GetFruit()
{
Fruit f = new Fruit();
f.Name = " banana " ;
f.Price = " 6.00 " ;
return f;
}
}
}
寄存服務(wù):
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using IFruit;
using FruitSvc;
namespace FruitHost
{
class Program
{
static void Main( string [] args)
{
using (ServiceHost host = new ServiceHost( typeof (FruitService),
new Uri( " http://localhost:8000 " )))
{
WSHttpBinding binding = new WSHttpBinding();
binding.ReliableSession.Enabled = true ;
binding.Security.Mode = SecurityMode.None;
// 改變地址端口為8080,這樣可以支持服務(wù)消息發(fā)送到8080端口,8000設(shè)置為監(jiān)聽端口
host.AddServiceEndpoint( typeof (IFruitService), binding, new Uri( " http://localhost:8080/FruitService " ),
new Uri( " http://localhost:8000/FruitService " ));
host.Open();
Console.WriteLine( " Fruit Service Is Running... " );
Console.ReadLine();
}
}
}
}
客戶端調(diào)用:
using System;
using System.ServiceModel;
using IFruit;
using FruitModel;
namespace FruitClient
{
class Program
{
static void Main( string [] args)
{
EndpointAddress epAddr = new EndpointAddress( " http://localhost:8080/FruitService " );
WSHttpBinding wsbinding = new WSHttpBinding();
wsbinding.ReliableSession.Enabled = true ;
wsbinding.Security.Mode = SecurityMode.None;
using (ChannelFactory < IFruitService > factory = new ChannelFactory < IFruitService > (wsbinding, epAddr))
{
IFruitService proxy = factory.CreateChannel();
Fruit f = proxy.GetFruit();
if (f != null )
{
Console.WriteLine( " Name: " + f.Name + " Price: " + f.Price);
}
}
Console.WriteLine( " Fruit Client Is Running... " );
Console.ReadLine();
}
}
}
可以看到現(xiàn)在客戶端訪問的服務(wù)端口為8080,而服務(wù)監(jiān)聽端口為8000,此時,運(yùn)行程序客戶端將不能夠調(diào)用服務(wù),因?yàn)榉?wù)端不監(jiān)聽8080端口。可以用TcpTrace做個消息轉(zhuǎn)發(fā),讓它監(jiān)聽8080端口,把任何訪問8080端口的消息轉(zhuǎn)發(fā)到8000端口。這樣TcpTrace就有機(jī)會捕捉客戶端與服務(wù)端的任何通訊消息。可以如下設(shè)置TcpTrace
程序的運(yùn)行結(jié)果如下:
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
