关于WCF中地址节点的配置

在WCF中配置节点可以有多种方式,下面依次讲解。

1:利用配置文件进行配置。新建一个控制台应用程序或者winform或者wpf都是可以的。然后我们就可以在他的app.config里面进行相关配置,代码都是一样的。下面是代码。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <system.serviceModel>
    <services>
      <service name="WcfLib.Message" behaviorConfiguration="WCFCfg">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/7788/Message"/><!--这是双工通信配置的基地址-->
            <add baseAddress="net.tcp://10.10.14.158:7788/Message"/><!--这是TCP配置的基地址-->
            <add baseAddress="net.pipe://localhost/"/><!--这是管道通信配置-->
            </baseAddresses>
          </host>
        <endpoint address="" binding="wsDualHttpBinding" contract="WcfLib.IMessage"/><!--双工通信终结点配置-->
        <endpoint address="" binding="netTcpBinding" contract="WcfLib.IMessage"/>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
        <!--这两个都是TCP终结点配置,缺一不可,如果单独使用后面的
        serviceMetadata httpGetEnabled="false"得设置为false-->
        <endpoint address="" binding="mexNamedPipeBinding" contract="IMetadataExchange"/>
        <endpoint address="mex" binding="netNamedPipeBinding" contract="WcfLib.IMessage"/>
        <!--这两个都是管道终结点配置,缺一不可,如果单独使用后面的
        serviceMetadata httpGetEnabled="false"得设置为false-->
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WCFCfg">
          <serviceMetadata httpGetEnabled="true"/>          
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
</configuration>

第二步添加引用using System.ServiceModel;然后在它的启动代码或是最开始运行的地方。控制台main函数,另外两个可以写在

窗口加载事件中。下面是控制台代码。

using (ServiceHost host = new ServiceHost(ServiceType))一个typeof类型的实现服务的类
            {
                host.Open();
                Console.WriteLine("服务已经启动!");

                Console.ReadLine();
                host.Close();
            }

最后以管理员的身份运行就可以启动服务了。

2:直接在启动程序中使用代码进行配置,首先获取本机的可用IP v4地址,代码如下

public string GetIP()
        {
            string name = Dns.GetHostName();
            IPHostEntry me = Dns.GetHostEntry(name);
            IPAddress[] ips = me.AddressList;
            foreach (IPAddress ip in ips)
            {
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            return (ips != null && ips.Length > 0 ? ips[0] : new IPAddress(0x0)).ToString();
        }

IPv4地址获取完后就可以进行服务的配置了,下面是配置代码。

 private void StartServer()
        {
            System.Threading.ThreadPool.QueueUserWorkItem(delegate
            {
                try
                {
                    isServerRun = true;
                    //获取本机IP
                    string ip = GetIP();
                    string tcpaddress = string.Format("net.tcp://{0}:{1}/Message/", ip, ServerPort);
                    //定义服务主机
                    ServiceHost host = new ServiceHost(typeof(MessageService), new Uri(tcpaddress));
                    //设置netTCP协议
                    NetTcpBinding tcpBinding = new NetTcpBinding();
                    tcpBinding.MaxBufferPoolSize = 2147483647;
                    tcpBinding.MaxReceivedMessageSize = 2147483647;
                    tcpBinding.MaxBufferSize = 2147483647;
                    //提供安全传输
                    tcpBinding.Security.Mode = SecurityMode.None;
                    //需要提供证书
                    tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
                    //添加多个服务终结点
                    //使用指定的协定、绑定和终结点地址将服务终结点添加到承载服务中
                    //netTcp协议终结点
                    host.AddServiceEndpoint(typeof(IMessageService), tcpBinding, tcpaddress);


                    #region 添加行为
                    //元数据发布行为
                    ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                    //支持get请求
                    behavior.HttpGetEnabled = false;

                    //设置到Host中
                    host.Description.Behaviors.Add(behavior);
                    #endregion
                    /////这部分其实就是config配置文件。我不过是把它写在了代码里面,看大家的习惯了,个人感觉这样他有助于理解里面的字段

                    //设置数据交换类型
                    host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
                    //启动服务
                    host.Open();
                    SetDisplayMessage(string.Format("服务启动成功,正在运行...\r\n{0}", tcpaddress));
                }
                catch (Exception ex)
                {
                    SetDisplayMessage("服务启动失败");
                    MessageBox.Show(ex.Message, "服务启动失败,请检测配置中IP地址");
                    Environment.Exit(0);
                }
            });
        }

3:使用WCF提供的配置工具进行,在工具下面有个WCF服务配置编辑器,进去按照步骤就可以进行配置。

 

以上是宿主程序的相关配置方法,接下来就是客户端的配置,客户端配置就比较简单。在客户端项目中右击添加服务引用,这时候确保宿主服务是在运行的状态,然后将宿主程序的地址给客户端地址,点击转到既可以进行客户端配置,然后右击就可以更新服务了。至此WCF配置部分结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值