zoukankan      html  css  js  c++  java
  • 使用托管应用程序运行和使用WCF服务

    看Windows SDK 里的WCF几天了, 感觉WCF就是把各种分布式技术和标准进行一个大融合和封装, 例如你可以使用wsHttpBinding在IIS上运行类似ASMX的网络服务, 也可以用netTcpBinding在托管应用程序中运行服务, 而这是.Net Remoting做的时期, 稍微看看netTcpBinding的实现, 其实它只是调用了.Net Remoting, 对它进行了封装.
    现在的Windows SDK测试版里对"Host a WCF Service in a Managed Application"这块说的不是太清楚, 希望下面的例子对学习WCF的同学有些参考作用.

    使用托管应用程序运行和使用WCF服务首先要定义服务契约(Contract), 这也是所有WCF服务都要做的事情, 这里举个最简单的:
        [ServiceContract]
        
    public interface ICalculator
        {
            [OperationContract]
            
    double Add(double n1, double n2);
        }
    这个接口文件可以放到一个独立的项目里, 和.Net Remoting一样, Server和Client项目都需要引用它

    在Server项目里,添加一个类, 实现服务接口:
        public class Calculator:ICalculator
        {
            
    #region ICalculator 成员

            
    public double Add(double n1, double n2)
            {
                
    return n1 + n2;
            }

            
    #endregion
        }
    在Server的App.config里加入服务配置:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      
    <system.serviceModel>
        
    <services>
          
    <service name="Server.Calculator"> <!--指定服务的实现类-->
            
    <endpoint address="net.tcp://localhost:10102/WcfService"
                      binding
    ="netTcpBinding"
              contract
    ="Interface.ICalculator" > <!--指定服务的契约接口-->
            
    </endpoint>
          
    </service>
        
    </services>
      
    </system.serviceModel>
    </configuration>
    服务器端的程序代码:
        class Program
        {
            
    static void Main(string[] args)
            {
                
    using (ServiceHost serviceHost = new ServiceHost(typeof(Calculator)))
                {
                    serviceHost.Open();
                    Console.WriteLine(
    "The service is ready.");
                    Console.ReadLine();
                    serviceHost.Close();
                }
            }
        }

    客户端的App.config文件:
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      
    <system.serviceModel>
        
    <client>
          
    <endpoint name="CalculatorClient" address="net.tcp://localhost:10102/WcfService"
                    binding
    ="netTcpBinding"
                    contract
    ="Interface.ICalculator">
          
    </endpoint>
        
    </client>
      
    </system.serviceModel>
    </configuration>
    和Server端的差不多, 注意endpoint的name, 在客户端程序中需要用到
    客户端的程序代码:
        class Program
        {
            
    static void Main(string[] args)
            {
                Console.ReadLine();
                
    using (ChannelFactory<ICalculator> factory = new ChannelFactory<ICalculator>("CalculatorClient"))
                {
                    ICalculator remoteCalculator 
    = factory.CreateChannel();
                    Console.WriteLine(remoteCalculator.Add(
    12));
                    Console.ReadLine();
                }
            }
        }
    OK啦..运行服务器服务, 然后打开客户端, 回车, 一个美丽的得数就会惊现于Console了. 这些东西底层还是.Net Remoting, 做起来用起来都没什么区别, 但代码看上去要比Remoting的华丽得多...而且统一的配置文件很是方便~
  • 相关阅读:
    基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版
    基于GDAL库,读取.nc文件(以海洋表温数据为例)C++版
    基于UDP传输协议局域网文件接收软件设计 Java版
    基于Oracle数据库登陆界面及功能实现 Java版
    ORM中的Model与DDD中的DomainModel
    探讨DDD中角色权限与DCI的使用
    哈工大软件构造 复习
    python列表的基本用法
    matlab简单的超越方程求解近似值
    MATLAB一些常用的function
  • 原文地址:https://www.cnblogs.com/Dah/p/507605.html
Copyright © 2011-2022 走看看