zoukankan      html  css  js  c++  java
  • WCF 入门例子

        刚开始研究WCF,这里尝试以最简单的方式构建搭建WCF的运行环境。一般用WCF有两种方式,一种是提供大的后台Service,这个可能发布到公网,一般使用http协议,宿主到IIS里面,然后另外一个Asp.Net网站或WPF之类的程序作为客户端来调用服务。另外一种是用来内部通讯,一般宿主到控制台程序来开发测试,宿主到windows service来发布。下面以一个简单的服务例子说明服务搭建过程。

    1. http协议,服务端和客户端都是web。

      1) 在vs里选择‘WCF->WCF应用程序’模板新建一个项目。

      2) 项目里面新建两个文件夹,一个是Def用来放接口定义类,一个是Impl用来放服务实现类。

      3) Def里面添加ITimeService.cs, 代码如下:

         

        [ServiceContract]
    public interface ITimeService
    {
    [OperationContract]
    DateTime GetNow();
    }

    这里省略了命名空间,不识别的类型右键解析一下。下面的代码类似。

      4) Impl目录里面添加TimeService0.cs,代码如下:

        public class TimeService0 : ITimeService
    {
    public DateTime GetNow()
    {
    return DateTime.Now;
    }
    }

      5) 将项目自动生成的IService1.cs干掉,将Service1.svc重命名成TimeService.svc, TimeService.svc.cs代码修改如下:

        

        [ServiceBehavior(Namespace="Services", Name="Time")]
    public class TimeService : TimeService0
    {
    }

      6) 按F5启动WCF服务,浏览器会弹出一个页面,点击TimeService.svc, 会显示服务描述,这个地址一般为http://localhost:8481/TimeService.svc,端口可能变化。

      7) 新建一个Asp.Net Web 应用程序WcfClient,添加服务引用,地址为http://localhost:8481/TimeService.svc。

      8) 在Default.aspx里面添加一个标签:<asp:Label ID="txt1" runat="server"></asp:Label>

      9) 后台代码修改如下:

        

    protected void Page_Load(object sender, EventArgs e)
    {
    TimeServiceClient timeServiceClient
    = new TimeServiceClient();
    txt1.Text = timeServiceClient.GetNow().ToString("yyyy年MM月dd日 hh时mm分ss秒");
    }

      10) 先后启动Wcf服务项目和Asp.Net项目,Asp.Net项目的网页里应该会显示当前时间,刷新页面时间也会刷新。

      11) 发布时在IIS7里面添加网站,填入网站名称并将物理路径设置成WCF应用程序项目目录即可。注意目录必须赋予IIS用户IIS_IUSRS读取和执行权限,具体参考下面链接设置权限:http://utervnx.blog.163.com/blog/static/14387703201052185627486/

    2. tcp协议,内部通讯,服务端和客户端都是控制台程序,这里我们不适用任何wcf模板,也不自动生成代码,完全用手工实现。

      1) 新建一个类库项目ServiceInterface1,添加对System.ServiceModel的引用。

      2) 增加ITimeService.cs,代码如下:

        [ServiceContract]
    public interface ITimeService
    {
    [OperationContract]
    DateTime GetNow();
    }

      3) 新建一个控制台应用程序WinService1作为服务端,将目标框架变成.Net Framework 4 并添加System.ServiceModel的引用。

      4) 增加类TimeService.cs,代码如下:

        public class TimeService : ITimeService
    {
    public DateTime GetNow()
    {
    return DateTime.Now;
    }
    }

      5) 在Program.cs里增加服务启动代码:

       

            static void Main(string[] args)
    {
    using (ServiceHost host = new ServiceHost(typeof(TimeService)))
    {
    host.Open();
    Console.WriteLine("Service starts.");
    Console.ReadKey();
    host.Close();
    }
    }

      6) 配置文件app.config如下:

    <?xml version="1.0"?>
    <configuration>
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
    <system.serviceModel>
    <services>
    <service name="WinService1.TimeService" behaviorConfiguration="WinService">
    <host>
    <baseAddresses>
    <add baseAddress="http://localhost:8000/WinService"/>
    <add baseAddress="net.tcp://localhost:8080/WinService"/>
    </baseAddresses>
    <timeouts openTimeout="00:01:00" closeTimeout="00:01:00"/>
    </host>
    <endpoint name="TimeService" address="TimeService" binding="netTcpBinding" contract="ServiceInterface1.ITimeService"/>
    <endpoint address="mex" binding="mexTcpBinding" name="MEX" contract="IMetadataExchange" />
    </service>
    </services>
    <behaviors>
    <serviceBehaviors>
    <behavior name="WinService">
    <serviceDebug includeExceptionDetailInFaults="True"/>
    <serviceMetadata />
    </behavior>
    </serviceBehaviors>
    </behaviors>
    </system.serviceModel>
    </configuration>

      7) 再新建一个控制台应用程序WinService1Client作为客户端,将目标框架变成.Net Framework 4 并添加System.ServiceModel的引用。

      8) 添加TimeServiceClient.cs:

        class TimeServiceClient : ClientBase<ITimeService>, ITimeService
    {
    public System.DateTime GetNow()
    {
    return base.Channel.GetNow();
    }
    }


      9)Program.cs代码:

            static void Main(string[] args)
    {
    TimeServiceClient client = new TimeServiceClient();
    Console.WriteLine(client.GetNow());
    Console.ReadKey();
    }

      10) 配置文件:

        

    <?xml version="1.0"?>
    <configuration>
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
    <system.serviceModel>
    <client>
    <endpoint address="net.tcp://localhost:8080/WinService/TimeService"
    binding
    ="netTcpBinding" contract="ServiceInterface1.ITimeService" name="TimeService">
    </endpoint>
    </client>
    </system.serviceModel>
    </configuration>

      11) 先后启动服务器和客户端,客户端应该显示当前时间。

  • 相关阅读:
    ARC 080
    CodeForces
    [Lydsy1806月赛] 路径统计
    AGC 022 C
    AGC 022 B
    AGC 020 B
    UVA
    AGC 018 A
    python
    python
  • 原文地址:https://www.cnblogs.com/alala666888/p/2344122.html
Copyright © 2011-2022 走看看