Creating a WCF Service

 

 从今天起开始跟着一个教程写一个关于WCF的系列博客,希望能够坚持下来。

 作为第一篇,来一个简单点的,创建一个WCF服务。先看一张整体的图片。



  

   通过上图可以看出,就是想通过一个WCF服务,来满足两个客户端的需求。一个是java web服务通过http访问,另一个则是windows web 服务通过Tcp访问。下面开始实战。


  1.创建WCF服务

     先创建一个类库,名称是HelloService,然后在此类库中创建WCF服务。

     

    

  2.创建完后,我们会看到,WCF一个接口和一个实现类,并且有了一个DoWork的方法。我们做一下修改,把方法名称修改为DoWork,并在实现类中做一下实现。具体代码如下:

  

<span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace HelloService
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“HelloService”。
    public class HelloService : IHelloService
    {
       
        public string GetMessage(string name)
        {
            return "Hello" + name;
        }
    }
}
</span>

  3.创建宿主

     在第二步中就已经把WCF服务创建好了,由于服务是依赖于宿主的,所以我们得为服务找一个安身的场所。

     新建控制台应用程序,名称为HelloServiceHost。在此需要添加WCF核心库using System.ServiceModel,并添加上述WCF类库的引用,添加配置文件,并在配置文件中做一下修改。

    

<span style="font-family:SimSun;font-size:18px;"><?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>


  <system.serviceModel>
    
    <services>
      
      <!--服务实现类的名称-->
      <service name="HelloService.HelloService" behaviorConfiguration="mexBehavior">
        <!--binging代表绑定的类型,有很多例如basicHttpBinding、netTcpBinding-->
        <!--contract代表我们所实现的契约,这就是我们对外提供的服务-->
        <endpoint address="HelloService" binding="basicHttpBinding" contract="HelloService.IHelloService">
          
        </endpoint>


        <endpoint address="HelloService" binding="netTcpBinding" contract="HelloService.IHelloService">

        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

        <host>
          <baseAddresses>
            <!--对外服务提供的基地址-->
            <add baseAddress="http://localhost:8080/"/>
            <add baseAddress="net.tcp://localhost:8090/"/>
          </baseAddresses>
        </host>
      </service>        
    </services>

    <behaviors>   
      <serviceBehaviors>       
        <behavior name="mexBehavior">
          <!--代表我们的元数据能够通过http/get访问到-->
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  
  </system.serviceModel>
  
  
</configuration></span>

   配置文件完成后,我们就开始启动我们的服务,在宿主中运行服务。具体代码如下:

   

<span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace HelloServiceHost
{
    class Program
    {
        static void Main(string[] args)
        {
            
            using (ServiceHost host = new ServiceHost(typeof(HelloService.HelloService)))
            {
                host.Open();
                Console.WriteLine("host started" + DateTime.Now.ToString());
                Console.ReadLine();
            }

        }
    }
}
</span>

  经过以上操作,就把我们写好的HelloService寄宿在我们的宿主中,并且启动成功,对外的地址是http://localhost:8080,可以访问地址,如果出现下述界面的话,代表成功。



 4.创建window web应用程序

     服务发布成功后,下面就创建一个web应用程序来访问我们的服务。

     新建HelloWebClient网站应用程序,并添加服务应用。此时需要启动宿主中的服务。

    

   

    这样就把我们刚才的服务引用添加其中。下面做一个简单的页面,就一个文本框,命令按钮和一个label,功能调用我们的服务,让label中现实文本框中的文本。具体代码如下:

 

<span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace HelloWebClient
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            HelloService.HelloServiceClient client = new HelloService.HelloServiceClient("NetTcpBinding_IHelloService");
           Label1.Text=  client.GetMessage(TextBox1.Text);
        }
    }
}</span>

最终效果如下图


  5.小结

   通过上述一系列的操作,就完成了一个WCF服务的创建,下一节的内容是WCF服务实现多个契约。

   本篇博客的源码地址:源码

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值