我是WCF的初学者。所以我正在网上阅读一个小wcf chat的代码。我坚持为wcf聊天创建wcf客户端。我正在阅读的网址http://islameldemery.blogspot.in/2008/05/wcf-serverclient-chat-sample.html
接口和服务有一部分是在 ServiceHost 的帮助下以win形式托管的,但我无法理解在客户端如何创建代理。
他们在下面使用此事件
InnerDuplexChannel.Opened
InnerDuplexChannel.Closed
InnerDuplexChannel.Faulted
我真的不明白。任何人都可以告诉我如何创建客户端。请访问该网址,并告诉我该人如何在客户端为该聊天服务创建代理。
我尝试动态创建代理,就像自托管为
一样var myBinding = new NetTcpBinding(SecurityMode.None);
DuplexChannelFactory<ISampleChatCallback> cf =
new DuplexChannelFactory<ISampleChatCallback>(
new CallbackImpl(),
myBinding,
new EndpointAddress("net.tcp://192.168.1.2:8080/DataService"));
IServerWithCallback srv = cf.CreateChannel();
但srv没有名为Opened,Closed或faulted等事件。我真的需要了解如何在cleint端创建代理。请帮我创建代理,因为我可以完成客户端的代码。感谢
答案 0 :(得分:1)
使用名为svcutil.exe
的命令行工具生成.NET的WCF客户端,该工具可以生成代理,此处记录在此:http://msdn.microsoft.com/en-us/library/aa751905.aspx。生成它们的一种非常常见的方法是在Visual Studio中向项目添加服务引用,最终生成与使用svcutil
相同的代理。此过程记录在此处:http://msdn.microsoft.com/en-us/library/ms733133.aspx
Svcutil将为您生成必要的代理类,并在内部使用Channel
进行通信。对于此频道,定义了州Opened
,Closed
和Faulted
。
答案 1 :(得分:0)
查看private void buttonConnect_Click(object sender, EventArgs e)
if (CheckServer()) //this seems to get metadata (MEX) from server
{
proxy = null;
InstanceContext context = new InstanceContext(this);
// Step into this method and see what code gets executed.
// This code can be generated by Visual Studio or written manually
proxy = new Client.SampleService.SampleChatClient(context);
proxy.InnerDuplexChannel.Opened += new EventHandler(InnerDuplexChannel_Opened);
...
}
proxy
公开了一些事件(我想)只是WCF双工通道通信类的包装器(无论它是什么)。当新连接被打开,关闭或出现故障状态时,这些事件会被触发。