0

我是 WCF 的初学者。所以我正在在线阅读小型 wcf 聊天的代码。我被困在为那个 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 没有称为打开、关闭或故障等的事件。我真的需要了解代理是如何在客户端创建的。请帮我创建代理,这样我就可以完成客户端的代码。谢谢

4

2 回答 2

1

.NET 的 WCF 客户端是使用名为的命令行工具生成的,该工具svcutil.exe可以生成代理,此处记录:http: //msdn.microsoft.com/en-us/library/aa751905.aspx。生成它们的另一种非常常见的方法是在 Visual Studio 中为您的项目添加服务引用,最终生成与使用svcutil. 此过程记录在这里:http: //msdn.microsoft.com/en-us/library/ms733133.aspx

Svcutil 将为您生成必要的代理类,并在Channel内部使用 a 进行通信。Opened状态和是为此通道定义的ClosedFaulted

于 2012-12-15T19:22:36.920 回答
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 双工通道通信类的包装器(不管它是什么)。当新连接打开、关闭或出现故障状态时,这些事件会被触发。

于 2012-12-15T19:23:58.440 回答