如何:使用单向和请求-答复协定访问 WCF 服务

// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
    //使用单向和请求-答复协定访问 WCF 服务
    //1.声明服务协定。 要成为单向的操作必须在 OperationContractAttribute 中将 IsOneWay 设置为 true。 下面的代码声明具有 Add、Subtract、Multiply 和 Divide 的单向操作的 IOneWayCalculator 协定。 它还定义称为 SayHello 的请求响应操作。

    //2.实现服务协定。 下面的代码实现 IOnewayCalculator 接口。

    //3.在控制台应用程序中承载服务。 下面的代码演示如何承载服务。

    [ServiceContract( Namespace = "http://Microsoft.ServiceModel.Samples" )]
    public interface IOneWayCalculator
    {
        [OperationContract( IsOneWay = true )]
        void Add( double n1, double n2 );

        [OperationContract( IsOneWay = true )]
        void Subtract( double n1, double n2 );

        [OperationContract( IsOneWay = true )]
        void Multiply( double n1, double n2 );

        [OperationContract( IsOneWay = true )]
        void Divide( double n1, double n2 );

        [OperationContract]
        string SayHello( string name );
    }

 

//实现接口

  

 public class Service1 : IOneWayCalculator
    {

        public void Add( double n1, double n2 )
        {
            double result= n1 + n2;
            Console.WriteLine( "add({0},{1}) = {2} ",n1,n2,result );
        }

        public void Subtract( double n1, double n2 )
        {
             double result= n1 - n2;
            Console.WriteLine( "Subtract({0},{1}) = {2} ",n1,n2,result );
        }

        public void Multiply( double n1, double n2 )
        {
             double result= n1 * n2;
            Console.WriteLine( "Multiply({0},{1}) = {2} ",n1,n2,result );
        }

        public void Divide( double n1, double n2 )
        {
            double result = n1 / n2;
            Console.WriteLine( "Divide({0},{1}) = {2} ", n1, n2, result );
        }

        public string SayHello( string name )
        {
            Console.WriteLine( "SayHello({0})", name );
            return "Hello " + name;

        }
    }

 

//异步请求发送

class Program
    {
        // Host the service within this EXE console application.
        public static void Main( )
        {
            Uri baseAddress = new Uri( "http://localhost:8000/servicemodelsamples/service" );

            using ( ServiceHost serviceHost = new ServiceHost( typeof( Service1 ), baseAddress ) )
            {
                serviceHost.AddServiceEndpoint( typeof( IOneWayCalculator ),
                    new WSHttpBinding( ), "" );
               

                ServiceMetadataBehavior smb = ( ServiceMetadataBehavior )
                    serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>( );
                if ( smb == null )
                {
                    smb = new ServiceMetadataBehavior( );
                    smb.HttpGetEnabled = true;
                    serviceHost.Description.Behaviors.Add( smb );
                }

                serviceHost.Open( );

                // The service can now be accessed.
                Console.WriteLine( "The service is ready." );
                Console.WriteLine( "Press <ENTER> to terminate service." );
                Console.WriteLine( );
                Console.ReadLine( );
            }
        }
    }

//求求应答

 class Program
    {
        static void Main( string[ ] args )
        {
            WSHttpBinding binding = new WSHttpBinding( );
            EndpointAddress epAddress = new EndpointAddress(
                "http://localhost:8000/servicemodelsamples/service" );
            OneWayCalculatorClient client = new OneWayCalculatorClient( binding, epAddress );

            // Call the Add service operation.
            double value1 = 100.00D;
            double value2 = 15.99D;
            client.Add( value1, value2 );
            Console.WriteLine( "Add({0},{1})", value1, value2 );

            // Call the Subtract service operation.
            value1 = 145.00D;
            value2 = 76.54D;
            client.Subtract( value1, value2 );
            Console.WriteLine( "Subtract({0},{1})", value1, value2 );

            // Call the Multiply service operation.
            value1 = 9.00D;
            value2 = 81.25D;
            client.Multiply( value1, value2 );
            Console.WriteLine( "Multiply({0},{1})", value1, value2 );

            // Call the Divide service operation.
            value1 = 22.00D;
            value2 = 7.00D;
            client.Divide( value1, value2 );
            Console.WriteLine( "Divide({0},{1})", value1, value2 );

            // Call the SayHello service operation
            string name = "World";
            string response = client.SayHello( name );
            Console.WriteLine( "SayHello([0])", name );
            Console.WriteLine( "SayHello() returned: " + response );
            client.Close();


        }
    }

posted @ 2012-09-06 01:41  blog_yuan  阅读(153)  评论(0编辑  收藏  举报