zoukankan      html  css  js  c++  java
  • 非常好的一个WCF服务创建讲解

    //WCF宿主-IIS

    //步骤:
    //一、定义消息
    // 消息的语义是指:服务中使用的数据对象。
    // 创建类库项目WCFMessage:开始-程序-Microsoft Visual Studio 2010-Microsoft Visual Studio 2010-文件-新建-项目-VisualC#-Windows-类库,解决方案名称:WCFHost,名称:WCFMessage。
    // 引入新的类库:System.Runtime.Serialization.dll
    // 创建类Person:删除项目自动生成的Class1.cs,新建一个Person类,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using Client;

    namespace WCFMessage
    {
    [DataContract]
    public class Person
    {
    [DataMember]
    public string Id;
    [DataMember]
    public string Name;
    [DataMember]
    public int Age;
    }
    }

    //二、定义服务协定
    // 服务协定的语义是指:定义服务的接口。
    // 创建类库项目WCFContract:右键解决方案'WCFHost'-添加-新建项目-VisualC#-Windows-类库,解决方案名称:WCFHost,名称:WCFContract。
    // 引入新的类库:System.ServiceModel.dll
    // 引入项目:WCFMessage
    // 创建类Person:删除项目自动生成的Class1.cs,新建一个IPersonService接口,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using WCFMessage;
    namespace WCFContract
    {

    [ServiceContract]

    public interface IPersonService
    {
    [OperationContract]
    void AddPerson(Person person);
    [OperationContract]
    List<Person> GetPersons();
    [OperationContract]
    void RemovePerson(Person person);
    }
    }

    //三、实现服务协定
    // 创建类库项目WCFService:右键解决方案'WCFHost'-添加-新建项目-VisualC#-Windows-类库,解决方案名称:WCFHost,名称:WCFService。
    // 引入项目:WCFMessage和WCFContract
    // 创建类PersonService:删除项目自动生成的Class1.cs,新建一个继承IPersonService接口的类PersonService,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using WCFMessage;
    using WCFContract;
    namespace WCFService
    {
    public class PersonService : IPersonService
    {
    List<Person> list = new List<Person>();
    public void AddPerson(Person person)
    {
    list.Add(person);
    }

    public List<Person> GetPersons()
    {
    return list;
    }

    public void RemovePerson(Person person)
    {
    list.Remove(list.Find(p => p.Id == person.Id));
    }
    }
    }

    //四、使用IIS承载服务
    // 创建WCF服务IISHost:右键解决方案'WCFHost'-添加-新建网站-VisualC#-WCF服务,解决方案名称:WCFHost,名称:IISHost。
    // 引入项目:WCFMessage,WCFContract,WCFService。
    // 删除AppCode目录下自动生成的IService.cs接口和Service1.cs
    // 修改Service.svc文件,修改后的内容如下:
    //<%@ ServiceHost Language="C#" Debug="true" Service="WCFService.PersonService"%>   
    //修改Web.config配置文件,这一步很关键,这是导致错误的主要原因所在地,修改后的内容如下:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.web>
    <compilation debug="false" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
    <behaviors>
    <serviceBehaviors>
    <behavior>
    <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
    <serviceMetadata httpGetEnabled="true"/>
    <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->
    <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
    </serviceBehaviors>
    </behaviors>
    <services>
    <!-- This section is optional with the default configuration model introduced in .NET Framework 4 -->
    <service name="WCFService.PersonService">
     <endpoint address="" binding="wsHttpBinding" contract="WCFContract.IPersonService" />
    </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
    </configuration>  

    // 发布服务:右键IISHost-发布网站,按照向导把服务发布到你指定的目录下。
    // 发布目录的文件夹权限设置:一要Web共享,二要给ASP.NET用户(IUSER)足够的权限。
    // 在IIS上为发布的服务建立虚拟目录:开始-运行-inetmgr-Internet信息服务-XXX(本地计算机)-网站-默认网站,
    //右键-新建-虚拟目录,按照向导完成。其中,别名:IISHost,目录:发布服务的目录,访问权限:除过写入,都勾选。
    // 测试:在虚拟目录下,浏览Service.svc,如果出现类似如下的页面显示,则表示成功。
    //PersonService 服务
    //已创建服务。
    //若要测试此服务,需要创建一个客户端,并将其用于调用该服务。可以使用下列语法,从命令行中使用 svcutil.exe 工具来进行此操作:

    svcutil.exe http://localhost/IISHost/Service.svc?wsdl

    //这将生成一个配置文件和一个包含客户端类的代码文件。请将这两个文件添加到客户端应用程序,并使用生成的客户端类来调用服务。例如:

    //C#

    class Test
    {
    static void Main()
    {
    PersonServiceClient client = new PersonServiceClient();
    // 使用 "client" 变量在服务上调用操作。
    // 始终关闭客户端。
    client.Close();
    }
    }

    //Visual Basic
    //Class Test
    //Shared Sub Main()
    // Dim client As PersonServiceClient = New PersonServiceClient()
    //' 使用 "client" 变量在服务上调用操作。
    // ' 始终关闭客户端。
    // client.Close()
    //End Sub End Class
    //有关安装IIS和运行WCF服务的更多信息,请参考http://msdn.microsoft.com/zh-cn/library/ms751518.aspx,http://msdn.microsoft.com/zh-cn/library/ms752252.aspx
    //五、测试服务
    // 生成客户端代理文件:开始-程序-Microsoft Visual Studio 2010-Visual Studio Tools-Visual Studio 命令提示(2010),输入cd /d E:\outputFiles,再输入svcutil.exe http://localhost/IISHost/Service.svc?wsdl,则会生成两个文件PersonService.cs和output.config。
    // 建立客户端应用程序:新建一个控制台应用程序(或着Windows窗体应用程序,或者WPF应用程序),这里以控制台应用程序为例,添加刚才生成的两个客户端代理文件PersonService.cs和output.config。
    // 引用新的类库System.Runtime.Serialization.dll和System.ServiceModel.dll
    // 编辑Program.cs,如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using WCFMessage;

    namespace ConsoleApplicationClient
    {
    class Program
    {
    static void Main(string[] args)
    {
    PersonServiceClient client = new PersonServiceClient();
    Person person = new Person();
    person.Id = "610623195604230123";
    person.Name = "张三";
    person.Age = 54;
    client.AddPerson(person);
    Person[] list = client.GetPersons();
    Console.WriteLine("Person information Id:{0},Name:{1},Age:{2}",
    list[0].Id, list[0].Name, list[0].Age);
    client.RemovePerson(person);
    client.Close();
    }
    }
    }

  • 相关阅读:
    Hadoop无法访问web50070端口
    Hadoop问题汇总
    Hadoop问题汇总
    Linux网络连接模式以及修改静态IP
    Linux网络连接模式以及修改静态IP
    Linux基本命令
    SQLite数据操作
    SQLite初试
    编码与解码
    属性列表
  • 原文地址:https://www.cnblogs.com/wzq806341010/p/2949085.html
Copyright © 2011-2022 走看看