zoukankan      html  css  js  c++  java
  • 化零为整WCF(3) 绑定Binding(basicHttpBinding和netTcpBinding)

    [索引页]
    [源码下载]


    化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)


    作者:webabcd


    介绍
    WCF(Windows Communication Foundation) - 绑定Binding:Http以basicHttpBinding为例,Tcp以netTcpBinding为例。


    示例
    1、服务
    IHello.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.ServiceModel;

    namespace WCF.ServiceLib.Binding
    {
        
    /// <summary>
        
    /// IHello接口
        
    /// </summary>

        [ServiceContract]
        
    public interface IHello
        
    {
            
    /// <summary>
            
    /// 打招呼方法
            
    /// </summary>
            
    /// <param name="name">人名</param>
            
    /// <returns></returns>

            [OperationContract]
            
    string SayHello(string name);
        }

    }

    Hello.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.ServiceModel;

    namespace WCF.ServiceLib.Binding
    {
        
    /// <summary>
        
    /// Hello类
        
    /// </summary>

        public class Hello : IHello
        
    {
            
    /// <summary>
            
    /// 打招呼方法
            
    /// </summary>
            
    /// <param name="name">人名</param>
            
    /// <returns></returns>

            public string SayHello(string name)
            
    {
                
    return "Hello: " + name;
            }

        }

    }


    2、宿主
    Hello.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.ServiceModel;

    namespace WCF.ServiceHost2.Binding
    {
        
    class Hello
        
    {
            
    static void Main(string[] args)
            
    {
                
    using (ServiceHost host = new ServiceHost(typeof(WCF.ServiceLib.Binding.Hello)))
                
    {
                    
    // 写代码的方式做host
                    
    // host.AddServiceEndpoint(typeof(WCF.ServiceLib.Binding.IHello), new NetTcpBinding(), "net.tcp://localhost:54321/Binding/Hello");
                    host.Open();

                    Console.WriteLine(
    "服务已启动");
                    Console.WriteLine(
    "按<ENTER>停止服务");
                    Console.ReadLine();
                }

            }

        }

    }

    App.config
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      
    <system.serviceModel>
        
    <services>
          
    <!--name - 提供服务的类名-->
          
    <!--behaviorConfiguration - 指定相关的行为配置-->
          
    <service name="WCF.ServiceLib.Binding.Hello" behaviorConfiguration="BindingBehavior">
            
    <!--address - 服务地址-->
            
    <!--binding - 通信方式-->
            
    <!--contract - 服务契约-->
            
    <!--<endpoint binding="basicHttpBinding" contract="WCF.ServiceLib.Binding.IHello" address="Hello" />-->
            
    <endpoint binding="netTcpBinding" contract="WCF.ServiceLib.Binding.IHello" address="net.tcp://localhost:54321/Binding/Hello" />
            
    <!--元数据交换的endpoint-->
            
    <!--注:address是mex,它会和host/baseAddresses节点中的baseAddress做拼接,即提供元数据交换的地址为:http://localhost:12345/Binding/mex-->
            
    <endpoint binding="mexHttpBinding" contract="IMetadataExchange" address="mex" />
            
    <host>
              
    <baseAddresses>
                
    <add baseAddress="http://localhost:12345/Binding/"/>
              
    </baseAddresses>
            
    </host>
          
    </service>
        
    </services>
        
    <behaviors>
          
    <serviceBehaviors>
            
    <behavior name="BindingBehavior">
              
    <!--httpGetEnabled - 使用get方式提供服务-->
              
    <serviceMetadata httpGetEnabled="true" />
            
    </behavior>
          
    </serviceBehaviors>
        
    </behaviors>
      
    </system.serviceModel>
    </configuration>


    3、客户端
    Hello.cs
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    using System.ServiceModel;

    namespace Client2.Binding
    {
        
    public partial class Hello : Form
        
    {
            
    public Hello()
            
    {
                InitializeComponent();
            }


            
    private void btnSayHello_Click(object sender, EventArgs e)
            
    {
                
    // 写代码的方式做client
                
    // IHello proxy = ChannelFactory<IHello>.CreateChannel(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:54321/Binding/Hello"));

                Binding.HelloClient proxy 
    = new Binding.HelloClient();

                MessageBox.Show(proxy.SayHello(txtName.Text));

                proxy.Close();
            }

        }

    }


    App.config
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      
    <system.serviceModel>
        
    <client>
          
    <!--address - 服务地址-->
          
    <!--binding - 通信方式-->
          
    <!--contract - 服务契约-->
          
    <!--<endpoint address="http://localhost:12345/Binding/Hello" binding="basicHttpBinding" contract="Binding.IHello" />-->
          
    <endpoint address="net.tcp://localhost:54321/Binding/Hello" binding="netTcpBinding" contract="Binding.IHello" />
        
    </client>
      
    </system.serviceModel>
    </configuration>


    运行结果:
    单击"Hello"按钮后弹出提示框,显示"Hello: webabcd"


    OK
    [源码下载]
  • 相关阅读:
    智能指针之 auto_ptr
    UML在线绘图
    inline使用
    工作随笔—2017-12-12
    链表排序
    转——浅谈如何提高服务器并发处理能力
    使用re开发python计算器
    Linux-centos7下python3 环境设置
    C语言中的static 详细分析
    pycharm import pygame 出现报错:No module named 'pygame'
  • 原文地址:https://www.cnblogs.com/webabcd/p/1017081.html
Copyright © 2011-2022 走看看