扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
//步骤:
//一、定义消息
// 消息的语义是指:服务中使用的数据对象。
// 创建类库项目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
[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
public void AddPerson(Person person)
{
list.Add(person);
}
public List
{
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配置文件,这一步很关键,这是导致错误的主要原因所在地,修改后的内容如下:
// 发布服务:右键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();
}
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流