创建WCF Web服务及其移动客户端代理

在开发各种网络服务时,可以通过多种方式为PC创建客户端代理:在Visual Studio中添加服务引用,或者简单地在命令行中设置参数,使用svcutil.exe工具,接收退出代码和配置文件。但是,如果业务涉及便携设备,如Pocket PC或智能手机,应该怎么做呢?幸运的是,这个问题有一个解决方案,将在本文中描述。

问题的解决方案

例如,将在Visual Studio2008中创建一个新的WCFWeb服务- 文件 -> 新建 -> 项目 -> Web -> WCF服务应用程序,命名为BooksService。然后,创建必要的数据类型和函数后,启动Web服务。它可能在IIS 6.0/7.0中,或者在内置的VS2008 ASP.NET开发服务器中。现在,可以问一个合理的问题 - 如何从口袋计算机连接到服务?幸运的是,除了编写自己的代理类之外,还有一种更简单的方法,那就是使用工具netcfsvcutil.exe,可以从这个链接下载。然后,让在给定工具的参数中设置下一行:"http://192.168.134.10:8888/BooksService.svc"。退出时,将收到两个文件:CFClientBase.cs和BooksServie.cs。这正是所需要的。现在,将详细讲述服务的创建和方便的移动客户端。

WCF服务

创建此Web服务后,声明其接口如下:

[ServiceContract] public interface IBooksService { [OperationContract] string[] GetBookNames(); [OperationContract] Book[] GetBooks(GetBookType type, string input); [OperationContract] Book[] GetAllBooks(); }

如所见,这段代码中使用了Book类。其实现如下:

[DataContract] public class Book { [DataMember] public string Name { get; set; } [DataMember] public string Author { get; set; } [DataMember] public string ISBN { get; set; } [DataMember] public decimal Price { get; set; } [DataMember] public string Description { get; set; } } public enum GetBookType { ISBN, Name, Author }

但是,服务何时获取这些关于书籍的信息呢?为了避免使用如SqlServer或Oracle等数据库的复杂示例,将数据存储在XML文件data.xml中,该文件构建在App_Data文件夹中。

PDA客户端

首先,应该创建一个新的项目Smart Device Project。之后,将有一个新纯表单和自动创建的初始化代码。在它上面,同时可以停止。正如在"问题的解决方案"部分所说,应该运行netcfsvcutil.exe,并开始使用必要的参数。应该将CFClientBase.cs和BooksService.cs文件附加到当前的项目中。现在,已经准备好了代理类的工作。让看看如何正确初始化连接到服务:

private void button1_Click(object sender, EventArgs e) { try { string remoteAddress = HelpClass.BuildUrl(); EndpointAddress endpoint = new EndpointAddress(remoteAddress); client = new BooksServiceClient(new BasicHttpBinding(), endpoint); comboBox1.Items.Clear(); foreach (string s in client.GetBookNames()) { comboBox1.Items.Add(s); } books.Clear(); books.AddRange(client.GetAllBooks()); if (books.Count > 1) button1.Enabled = true; comboBox1.SelectedIndex = 0; } catch (Exception ex) { MessageBox.Show(string.Format("Connection Error: {0}", ex.Message)); } }

HelpClass类已被使用:

public static class HelpClass { static XDocument doc = XDocument.Load(Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(0, Assembly.GetExecutingAssembly().GetName().CodeBase.LastIndexOf('\\') + 1) + "settings.xml"); public static string BuildUrl() { return string.Format("http://{0}:{1}/BooksService.svc", doc.Root.Element("Host").Value, doc.Root.Element("Port").Value); } }

连接到最终点后,可以充分利用Web服务提供的所有功能。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485