Host、EndPoints及配置服务(二)

原创 2015年11月18日 09:17:22

服务的三要素(ABC)
A:Address 意味着在哪里(也含有传输方式信息)
B:Binding 意味着怎么做(与地址的传输方式要匹配)
C:Contract意味着做什么(服务契约)

配置文件:

<system.ServiceModel>
<services>
<service>
<endpoint/>     /*服务和终结点*/
</service>
</services>
<bindings>     /*绑定(可选)*/
<binding>
</binding>
</bindings>
<behaviors>    /*行为(可选) */
<behavior>
</behavior>
</behaviors>
</system.ServiceModel>

 endpoint元素
 每个终结点都需要以下属性表示的地址、绑定和协定:
– address。指定服务的统一资源标识符(URI),它可以是一个绝对
地址,或是一个相对于服务基址给定的地址。如果设置为空字符
串,则指示在创建服务的ServiceHost 时,终结点在指定的基址
上可用。
– binding。通常,指定一个类似WsHttpBinding 的系统提供的绑定,
但也可以指定一个用户定义的绑定。指定的绑定确定传输协议类
型、安全和使用的编码,以及是否支持或启用可靠会话、事务或
流。
– bindingConfiguration。如果必须修改绑定的默认值,则可通过在
bindings 元素中配置相应的binding 元素来执行此操作。此属性
应赋予与用于更改默认值的binding 元素的name 属性相同的值。
– contract。指定定义协定的接口。这是在由service 元素的name
属性指定的公共语言运行库(CLR) 类型中实现的接口。

绑定(Binding)
绑定:
就是预先配置好的信道栈,它代表了客户端和服务器之间线路级别上的约定。每个绑定都会指定通信所用的传输、编码及协议。通过绑定,WCF封装了各种不同通信场所下所使用的配置。

这里写图片描述

这里写图片描述

性能比较:
这里写图片描述
Get256Bytes50000次 平均响应时间(单位:ms) 值小者为佳

端点地址的定义
 终结点的地址由EndpointAddress 类表示,该类包含一个表示服务地址的统一资源定位符(URI),大多数传输的地址URI 包含四个部分。
 例如,
http://www.sina.com.cn:3200/mathservice”这个URI 具有以下四个部分:
– 方案:http:
– 计算机:www.sina.com.cn
– (可选)端口:3200
– 路径:/mathservice

端点地址定义
 •在配置文件中定义终结点地址

<system.serviceModel>
<services>
<service
name="CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/service"/>
</baseAddresses>
</host>
<endpoint address=""  binding="wsHttpBinding"  contract="Samples.ICalculator" />
<endpoint address="/test"  binding="wsHttpBinding"
contract="Samples.ICalculator" />
<endpoint address="net.tcp://localhost:9000/service"
binding="netTcpBinding"
contract="Samples.ICalculator" />
</service>
</services>

下面举例讲解一下WCF服务的调用及简单配置:
首先创建WCF服务应用程序WcfServiceLibrary2
Iservice接口:

using System.Data;
using System.Data.SqlClient;

namespace WcfServiceLibrary2
{

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
         DataTable getLinks();
        [OperationContract]
         void addEmps( link e);

    }

    [DataContract]
    public class link
    {
        private int id;
        [DataMember]
        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        private string site_path;
        [DataMember]
        public string Site_path
        {
            get { return site_path; }
            set { site_path = value; }
        }

        private string user_name;
        [DataMember]
        public string User_name
        {
            get { return user_name; }
            set { user_name = value; }
        }

        private string user_tel;
        [DataMember]
        public string User_tel
        {
            get { return user_tel; }
            set { user_tel = value; }
        }

    }
}

对应的实现:

using System.Data;
using System.Data.SqlClient;

namespace WcfServiceLibrary2
{
    // 注意: 如果更改此处的类名“IService1”,也必须更新 App.config 中对“IService1”的引用。
    public class Service1 : IService1
    {

        #region IService1 成员

        public System.Data.DataTable getLinks()
        {
            using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123;database=GjjWebdb"))
            {
                string sql = " select * from dt_link";
                SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
                DataTable dt = new DataTable("员工表");
                sda.Fill(dt);
                return dt;
            }
        }

        public void addEmps(link e)
        {
            using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123;database=GjjWebdb"))
            {

                string sql = "insert into dt_link value(@id,@User_name,@User_tel,@Site_path)";
                SqlCommand cmd = new SqlCommand(sql,conn);
                cmd.Parameters.AddWithValue("@id",e.Id);
                cmd.Parameters.AddWithValue("@User_name", e.User_name);
                cmd.Parameters.AddWithValue("@User_tel", e.User_tel);
                cmd.Parameters.AddWithValue("@Site_path", e.Site_path);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }

        #endregion
    }
}


然后再创建web窗体应用程序WCFServer
1,  先添加引用System.serviceModel,和刚建立的WCF服务WcfServiceLibrary2
2,  Form1窗体中添加两个按钮,分别表示服务的开启以及停止,并创建ServiceHost对象

   ServiceHost host = null;

        //开启
        private void button1_Click(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(WcfServiceLibrary2.Service1));
            host.Open();
            label1.Text = "服务已开启";
        }
        //停止
        private void button2_Click(object sender, EventArgs e)
        {
            if (host.State != CommunicationState.Closed)
            {
                host.Close();
                label1.Text = "服务已停止";
            }
        }

3, 添加应用程序配置文件App.config

<configuration>
  <system.serviceModel>
    <services>

      <service name="WcfServiceLibrary2.Service1" behaviorConfiguration="testBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:3333"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary2.IService1"></endpoint>

      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="testBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>

      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>
</configuration>

到此,服务即可启动以及停止,可以用浏览器打开http://localhost:3333查看;

版权声明:本文为博主原创文章,未经博主允许不得转载。

RAC集群资源 Not All Endpoints Registered的故障

场景:一、ora.listener.snr 的node2资源一直显示Not All Endpoints Registered,node1为正常。 二、两个节点的grid用户监听进程又是正常 ...

maven如何导入jar包到本地仓库

很多时候通过maven来远程下载jar包,由于网速或者仓库地址问题导致下载失败或者非常缓慢。这时候我们往往会有这样的需求,就是把通过其他手段拿到的jar包安装到本地maven仓库,然后在pom.xml...

详解登录认证及授权--Shiro系列(一)

Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的...

Mule ESB Endpoints配置摘要

1.Endpoint简介 Endpoints are used to connect services. An endpoint is a specific channel on which a s...

关于Flex的MessageBroker Endpoints channels的配置运用

MessageBroker 我们称他为信息经纪人,它职责就是把messages 发给到services 就是我们的程序服务,它是BlazeDs在服务器上的核心。endpoint 处理完一个reques...
  • jhjbjbn
  • jhjbjbn
  • 2015年11月07日 14:30
  • 885

linux系统服务(1)----/etc/host* 文件说明

一、/etc/hosts >man  hosts >

使用windows service Host wcf服务

wcf服务原来是用windows应用程序来自Host的,但是在测试并发的时候发现了个问题:“即使是单调实例加并发模式,方法的调用也不是并发的,而是像队列一样顺序执行的,而且执行的线程的ID都是同一个。...

基于Devstack 开发环境下Reboot Host之后的各个服务的启动过程

基于Devstack 开发环境下Reboot Host之后的各个服务的启动过程 2013-01-01 07:55:14    DevStack是一个开源脚本,用于搭建单节点的ope...
  • AWHANE
  • AWHANE
  • 2015年03月11日 14:51
  • 372
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Host、EndPoints及配置服务(二)
举报原因:
原因补充:

(最多只允许输入30个字)