专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

WCF的双向通信

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:14:19       共计:3630 浏览

WCF的出现,无疑验证了那句“分久必合,和久必分”传世经典。
WCF整合了Remoting和webService等等。而且开发简单 (相对的),它既弥补Remoting的只能在.net上运行,又弥补了asmx只能单向传送消息的缺点。也就是说,WCF是实现跨平台,在跨平台的同 时,也可以双向通信。在WCF的编程思想中,无疑将SOA的思想体现的淋漓尽致。

首先要做的是就是定义服务契约。定义契约一般使用接口,使得实现和消费这个服务的双方都要按照这个契约来实现相应的接口。在双向通信中至少要定义两个服务,一个服务是供消费程序消费的,另一个则是在callBack的时候调用的服务,这个服务应该由消费程序实现。

其次,就是在服务端实现这些契约(说白了就是实现上面定义的接口)。在开发中,我们经常会把这个实现独立出来,方便在不同的宿主中发布这些服务。

最后,实现客户端。在双向通信中,客户端也是服务端,因为它也实现了服务契约。

来段代码:
Contract:

namespace Lin.Contract
{
    [ServiceContract(CallbackContract
=typeof(ICallBack))]
    
public interface IHello
    
{
        [OperationContract]
        
void SayHelloTo(string userName);
    }

}

namespace Lin.Contract
{
    [ServiceContract]
    
public interface ICallBack
    
{
        [OperationContract]
        
void ReceiveTime(DateTime time);
    }

}

Service:
namespace Lin.Service
{
    [ServiceBehavior(ConcurrencyMode 
= ConcurrencyMode.Reentrant)]
    
public class ServiceHello : IHello
    
{
        
#region IHello 成员

        
public void SayHelloTo(string userName)
        
{
            Console.WriteLine(
"Hello {0}", userName);
            OperationContext.Current.GetCallbackChannel
<ICallBack>().ReceiveTime(DateTime.Now);
        }


        
#endregion

    }

}
Host:
class Program
    
{
        
static void Main(string[] args)
        
{
            
using (ServiceHost host = new ServiceHost(typeof(ServiceHello)))
            
{
                host.Open();
                Console.Read();
            }


        }

    }
Client:
namespace Lin.Client
{
    
public class ClientCallBack:ICallBack
    
{
        
#region ICallBack 成员

        
public void ReceiveTime(DateTime time)
        
{
            Console.WriteLine(
"服务器收到消息的时间是:{0}", time.ToLongTimeString());
        }


        
#endregion

    }

}

调用服务:
namespace Lin.Client
{
    
public class ClientHello : DuplexClientBase<IHello>, IHello
    
{
        
public ClientHello(InstanceContext instance) : base(instance) { }

        
#region IHello 成员

        
public void SayHelloTo(string userName)
        
{
            
base.Channel.SayHelloTo(userName);
        }


        
#endregion

    }

}

class Program
    
{
        
static void Main(string[] args)
        
{
            Hello();
            Console.Read();
        }

        
static void Hello()
        
{
            ClientCallBack callBack 
= new ClientCallBack();
            ClientHello hello 
= new ClientHello(new InstanceContext(callBack));
            
string commandString = string.Empty;
            
while (commandString != "exit")
            
{
                commandString 
= Console.ReadLine();
                hello.SayHelloTo(commandString);
            }

        }

    }

大概是一年前,看见csdn在上面狂吹SOA,没想到这个看起来很神奇的东西,事实上并不是很神奇,如同OO的出现一样,有些人是注重OO的思 想,有些人注重OO的实现。同样的,SOA应该更多的是提倡一种面向服务架构的思想。SOA如何实现,这个不重要,每个平台都有自己的实现方式。这也体现 了技术要服务于社会。
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:remoting与socket、webservice和wcf的比较及优势 | ·下一条:Windows下使用VisualSVN Server搭建SVN服务器

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有