【问题标题】:How to create a proxy for WCF service hosted in windows apps如何为 Windows 应用程序中托管的 WCF 服务创建代理
【发布时间】:2012-12-16 03:23:58
【问题描述】:

我是 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 没有称为 Opened、Closed 或 faulted 等的事件。我真的需要了解代理是如何在客户端创建的。请帮我创建代理,这样我就可以完成客户端的代码。谢谢

【问题讨论】:

    标签: c# wcf


    【解决方案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 进行通信。状态OpenedClosedFaulted 就是为这个通道定义的。

    【讨论】:

    • 问题是没有svc文件。只有几个界面和一个扩展这些界面的winform。所以当我添加去添加服务参考选项并单击发现按钮时,什么也没有发生。我是新的......所以无法理解如何添加服务参考。可以请转到我复制代码的网址,然后告诉我如何为那种服务创建代理??
    • 当人们使用 svcutil 工具生成代理然后代理相关的类存储在哪里......我以前从未使用过它。请帮忙。
    • Visual Studio 为其生成的所有文件创建一个子目录。但你通常不必看那些。
    【解决方案2】:

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

    【讨论】:

    • 我复制了那个代码但是得到了error.proxy这个词在编译时给出了错误。你能告诉我那篇文章中缺少代理词错误的任何部分代码吗?谢谢
    • @Thomas 源代码不可用,所以我猜他使用 VS 生成客户端代码。尝试adding a reference(到 WCF 服务)到您的客户端项目。这应该在上下文菜单中,右键单击客户端项目并选择添加服务引用...。确保你给一个新的参考一致的名字,我认为它是 Client.SampleService.SampleChatClient
    • 我知道如何添加服务参考,但我不明白我必须为服务参考输入什么 url。你可以建议。谢谢
    • 所以告诉服务端什么时候没有 .svc 文件然后如何添加服务引用。如果你去代码然后你可以看到没有 .svc 文件引用。
    • @Thomas 你能单独启动服务器吗?这是您需要提供的 URL。在示例中为 net.tcp://localhost:4477/SampleWCFChat/localhost:4478/SampleWCFChat
    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多