WCF_自宿主服务

时间:2022-09-01 08:53:30

添加命名空间

编写WCF服务,首先需要添加必要引用


using System.ServiceModel; //服务契约
using System.Runtime.Serialization; //数据契约

对于自宿主的WCF服务,只需要如下步骤:

  • 创建一个控制台项目
  • 编写服务接口及实现
  • 对服务进行相关的通信配置
  • 手动启动服务

通过以上步骤 服务就可以正常调用了。


接下来举个例子:

创建一个控制台项目,添加WCF服务SayHi

在项目中多了个两个类文件,一个ISayHi接口类,一个SayHi实现类。

在接口类中添加方法

 [ServiceContract]
    public interface ISayHi
    {
        [OperationContract]
        string ToSayHi();
        /// <summary>
        /// 自我介绍
        /// </summary>
        /// <param name="person">个人信息</param>
        /// <returns>返回个人介绍</returns>
        [OperationContract]
        string Introduce(Person person);
    }

在实现类中,实现接口方法

public class SayHi : ISayHi
    {
        public string ToSayHi()
        {
            return "Hi~~";
        }
        /// <summary>
        /// 自我介绍
        /// </summary>
        /// <param name="person">个人信息</param>
        /// <returns>返回个人介绍</returns>
        public string Introduce(Person person)
        {
            return person.Introduce();
        }
    }

其中Person类的定义如下;

  [DataContract]
    public class Person
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public int Age { get; set; }
        [DataMember]
        public string Country { get; set; }

        public string Introduce()
        {
            return string.Format("Hello,my name is {0}.I am {1} years old.I am from {2}.", Name, Age, Country);
        }
    }

注意DataMember属性,可以控制字段的可见性。默认是都可见,如果DataMember属性在类中出现,则没有添加该属性的字段不可见。


服务编写完成 ,然后就对服务进行通信配置

由于服务的自宿主,服务配置就在当前项目的App.config文件中进行配置

服务端的配置一般包含三部分,服务的endpoint配置,binding方式配置,以及behavior行为配置

对于自宿主的服务,服务的地址是有服务配置确定的,所以会在服务节点,有一个host节点,配置服务访问的地址。

配置文件具体配置内容如下:

  <system.serviceModel>
    <services>
      <service name="WCFConsoleHost.SayHi"  behaviorConfiguration="HttpGetEnable">
        <endpoint address="" bindingConfiguration="NoSecurity" binding="basicHttpBinding" contract="WCFConsoleHost.ISayHi" />
        <!--自宿主服务 多一个host节点-->
        <host>
          <baseAddresses>
            <add baseAddress='http://localhost:8082/SayHi'/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="NoSecurity" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="HttpGetEnable">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

服务配置完成,编写服务启动代码

在主程序中,通过实例化一个ServiceHost,然后调用其open方法,启动服务

服务启动代码如下:

static void Main(string[] args)
        {
            var service = new ServiceHost(typeof(SayHi));
            try
            {
                service.Opened += delegate
                {
                    Console.Write("wcf is start");
                };
                service.Open();
            }
            catch (Exception)
            {
                service.Abort();
                throw;
            }
            Console.ReadKey();
        }


启动项目,当看到控制台输出“wcf is start”,说明服务已经启动


打开服务测试客户端

添加服务,服务地址输入配置文件中host节点中配置的服务地址。

WCF_自宿主服务

可以看到服务正常连接,并且成功返回预期的结果。


以上就是自宿主服务的编写、配置、启动以及调用测试。

当然调用方式还有很多种。只需要在客户端配置与服务端一直的通信,创建客户端执行方法调用即可。

后续其他宿主方式中会讲解到 。


WCF测试客户端的使用可查看文章:WCF_实用小工具

http://blog.csdn.net/shiyaru1314/article/details/75537554