[索引页]
[×××] 


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


作者:webabcd


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


示例
1、服务
IHello.cs
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Collections.Generic;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Linq;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Text;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.ServiceModel;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲namespace WCF.ServiceLib.Binding
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲{
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        /// <summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        /// IHello接口
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        /// </summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        [ServiceContract]
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        public interface IHello
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// <summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// 打招呼方法
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// </summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// <param name="name">人名</param>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// <returns></returns>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                [OperationContract]
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                string SayHello(string name);
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲}
 
Hello.cs
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Collections.Generic;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Linq;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Text;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.ServiceModel;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲namespace WCF.ServiceLib.Binding
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲{
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        /// <summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        /// Hello类
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        /// </summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        public class Hello : IHello
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// <summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// 打招呼方法
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// </summary>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// <param name="name">人名</param>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                /// <returns></returns>
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                public string SayHello(string name)
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        return "Hello: " + name;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲}
 

2、宿主
Hello.cs
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Collections.Generic;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Linq;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Text;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.ServiceModel;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲namespace WCF.ServiceHost2.Binding
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲{
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        class Hello
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                static void Main(string[] args)
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        using (ServiceHost host = new ServiceHost(typeof(WCF.ServiceLib.Binding.Hello)))
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                                // 写代码的方式做host
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                                // host.AddServiceEndpoint(typeof(WCF.ServiceLib.Binding.IHello), new NetTcpBinding(), "net.tcp://localhost:54321/Binding/Hello");
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                                host.Open();
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                                Console.WriteLine("服务已启动");
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                                Console.WriteLine("按<ENTER>停止服务");
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                                Console.ReadLine();
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲}
 
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
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Collections.Generic;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.ComponentModel;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Data;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Drawing;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Linq;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Text;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.Windows.Forms;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲using System.ServiceModel;
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲namespace Client2.Binding
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲{
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        public partial class Hello : Form
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                public Hello()
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        InitializeComponent();
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                private void btnSayHello_Click(object sender, EventArgs e)
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                {
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        // 写代码的方式做client
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        // IHello proxy = ChannelFactory<IHello>.CreateChannel(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:54321/Binding/Hello"));
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        Binding.HelloClient proxy = new Binding.HelloClient();
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        MessageBox.Show(proxy.SayHello(txtName.Text));
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                        proxy.Close();
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲                }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲        }
化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)_休闲}
 
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
[×××]