如何为Windows应用中托管的WCF服务创建代理

时间:2012-12-15 19:05:58

标签: c# wcf

我是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端创建代理。请帮我创建代理,因为我可以完成客户端的代码。感谢

2 个答案:

答案 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进行通信。对于此频道,定义了州OpenedClosedFaulted

答案 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双工通道通信类的包装器(无论它是什么)。当新连接被打开,关闭或出现故障状态时,这些事件会被触发。