none
WCF的host是否能主动调用Client RRS feed

  • 问题

  •   WCF中Host打开,作为服务;然后client调用服务。或者通过Duplex实现双向通信。
      但是现在公司要做的是,ClientA调用Host,执行完毕之后,Host对ClientB,ClientC发送数据。ClientB,ClientC执行完之后,回调。
     难道也是在ClientB,ClientC也做个服务,Host也做服务?互相调用?

    2009年8月24日 11:07

答案

  • 你的问题我和天天学习在;请教关于WCF的一些场景问题.已订阅
    讨论过。 
       WCF服务需要客户端主动请求服务,然后服务才能相应客户端请求,或者执行回调操作。
       WCF服务不知道客户端的位置。
     
    你的case里。可行的解决办法。
    1.直接在ClientA里调用WCF服务,然后在ClientA里在发送数据给ClientB,ClientC。功能转移。
    2.ClientB,ClientC轮训方式调用WCF服务,比如满足什么条件的时候才返回数据给ClientB,ClientC。
      Duplex双工通信,也是需要客户端先发送请求,建立连接。
      目前我能给出的参考建议~
      你可以再查找一下资料~
     
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月24日 12:13
    版主
  • 如果有了duplex,那么client只能收到server的消息,这个时候server期待的是反馈,于是client在callback里面再次调用server的时候往往会出问题。

    不过duplex还是很好用的,server提供service和callback interface,client实现一下那个interface就好了。
    2009年8月26日 3:53

全部回复

  • 你的问题我和天天学习在;请教关于WCF的一些场景问题.已订阅
    讨论过。 
       WCF服务需要客户端主动请求服务,然后服务才能相应客户端请求,或者执行回调操作。
       WCF服务不知道客户端的位置。
     
    你的case里。可行的解决办法。
    1.直接在ClientA里调用WCF服务,然后在ClientA里在发送数据给ClientB,ClientC。功能转移。
    2.ClientB,ClientC轮训方式调用WCF服务,比如满足什么条件的时候才返回数据给ClientB,ClientC。
      Duplex双工通信,也是需要客户端先发送请求,建立连接。
      目前我能给出的参考建议~
      你可以再查找一下资料~
     
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月24日 12:13
    版主
  • 谢谢老师了,不过这正好给了大致的方向,公司都是完全让我去自己做的,一个人不大好做,没什么人讨论~就来这里了,呵呵!
    2009年8月24日 15:06
  • 谢谢老师了,不过这正好给了大致的方向,公司都是完全让我去自己做的,一个人不大好做,没什么人讨论~就来这里了,呵呵!

    欢迎来这里讨论问题~
    呵呵,大家一起讨论学习的快~
    不要客气~
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月24日 15:08
    版主
  • 如果有了duplex,那么client只能收到server的消息,这个时候server期待的是反馈,于是client在callback里面再次调用server的时候往往会出问题。

    不过duplex还是很好用的,server提供service和callback interface,client实现一下那个interface就好了。
    2009年8月26日 3:53
  • duplex应该是client 发消息给server吧,然后server把消息callback给client吧,你说的这种是server主动发消息给client吧,有这种事件么?
    2009年8月28日 6:35
  • 回调的前提也是客户端首先调用WCF服务。然后回调客户端。
    Server主动发消息给客户端。
    我认为还不现实,目前了解的信息是不能的。
    毕竟服务时公开的。
    客户端来消费一个服务。
    和Web Service有些类似。
    服务并不能主动确定客户端的地址,因而也不能首先建立连接来连接客户端。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月30日 12:50
    版主
  • client去连接server是必然的,其实也很合理,似乎跟server发消息给client也没什么矛盾……就像MSN一样,无论服务器主动通知了你多少,你总是要先登录的。
    2009年8月30日 12:54
  • 你也说的是似乎。。。我还以为有呢,刚刚查询了下wcf的事件广播,看了下,也仍算是客户端主动调用server的。
    徐老师也解释了好多次服务不能主动调用客户端的
    2009年8月31日 7:24
  • WCF开发的目标是消息应用程序,也就是两个应用系统式通过特定的消息进行通信的。
    客户端和服务端只是其中一个消息应用。
    Soap Message里有个ReplyTo字段,就是告诉消息处理结束以后,可以往该地址返回消息。

    理论上说,一个消息应用给另外一个消息应用发送消息。是可以的。
    1.要么知道对方的地址,直接发送。
    2.要么就是在一定地址注册中心查找地址,来发送消息。
    3.最后就是使用网络广播。在整个网络内发送消息。每个节点都会收到。

    方式2和3是WCF 4.0新增的WS-Discovery.服务机制里使用的方式。

    但是目前的服务端主动发送消息来给客户端。

    客户端要保证接收到消息,本质上要从网络中接受消息,然后做进一步的消息处理工作。
    回调机制也需要客户端进程在等待服务的响应消息。
    PeerChannel 对等通道也需要客户端地址解析服务。
    来保证消息可以发送到其他的客户端。

    目前就我所知,服务主动调用客户端还不现实,你可以再回调里实现,但是前提还是客户先做了请求,你可以保持这个客户端上下文的引用。你知道客户端的地址。不然即使发送了消息,客户单不能接收处理,也没有任何意义。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年11月20日 4:38
    版主
  • 这里有个类似的帖子。
    也是不可以。
    http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/02b37b5b-08d1-4f5b-8ce4-ef1d9f44a38d

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年11月20日 4:40
    版主
  • WCF开发的目标是消息应用程序,也就是两个应用系统式通过特定的消息进行通信的。
    客户端和服务端只是其中一个消息应用。
    Soap Message里有个ReplyTo字段,就是告诉消息处理结束以后,可以往该地址返回消息。

    理论上说,一个消息应用给另外一个消息应用发送消息。是可以的。
    1.要么知道对方的地址,直接发送。
    2.要么就是在一定地址注册中心查找地址,来发送消息。
    3.最后就是使用网络广播。在整个网络内发送消息。每个节点都会收到。

    方式2和3是WCF 4.0新增的WS-Discovery.服务机制里使用的方式。

    但是目前的服务端主动发送消息来给客户端。

    客户端要保证接收到消息,本质上要从网络中接受消息,然后做进一步的消息处理工作。
    回调机制也需要客户端进程在等待服务的响应消息。
    PeerChannel 对等通道也需要客户端地址解析服务。
    来保证消息可以发送到其他的客户端。

    目前就我所知,服务主动调用客户端还不现实,你可以再回调里实现,但是前提还是客户先做了请求,你可以保持这个客户端上下文的引用。你知道客户端的地址。不然即使发送了消息,客户单不能接收处理,也没有任何意义。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    貌似大家都有服务器发消息给客户端应用的问题。
    针对你提出的第二个问题:我有些我的方法处理,不知道大家会不会这样处理。

    http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/2880fcbe-90c8-47a3-811b-517ae623e428
    2010年3月15日 9:12
  • 注册回调是能行,但遇到超时问题很纠结,长了会保持死连接,短了回调时就不可用,有什么方案?

    2011年11月1日 6:30
  • 注册回调是能行,但遇到超时问题很纠结,长了会保持死连接,短了回调时就不可用,有什么方案?

    try{

       ////Send

      } catch{

    ///不做处理,这样应该可以解决你的问题吧,我是这样操作的。

    }


    认真学习,不耻下问.^_^
    2011年11月2日 2:36