如何通过中间服务访问控制台托管的WCF服务

在.NET开发中,WCF(Windows Communication Foundation)服务是一种常用的服务架构,它允许开发者构建服务和客户端应用程序之间的通信。通常,WCF服务托管在IIS中,可以通过添加服务引用的方式直接访问。但是,如果WCF服务是托管在控制台应用程序中,那么就不能直接添加服务引用,因为这些服务并不对外公开,无法直接访问。本文将介绍一种通过创建中间服务来访问控制台托管的WCF服务的方法。

系统要求:.NET Framework 4.0、Visual Studio 2010和Windows Phone 7SDK。为了演示这种方法,创建了以下项目:

解决方案中总共有9个项目:

  • ActualService:实际的服务,包含Person对象接口的实际实现。
  • ActualServiceForPhone:作为Windows Phone 7调用底层WCF服务ActualService的桥梁服务。
  • IPerson:在服务和客户端中使用的接口类。
  • IPersonSL和IPersonSLPhone:这两个类库与IPerson相同,但分别对应Silverlight项目和Windows Phone 7项目。
  • ServiceHost:控制台应用程序,用于托管WCF服务
  • SLClient和SLClient.Web:Silverlight 4.0的默认模板项目,包含一个按钮和一个网格,用于显示来自ActualService WCF服务的数据。
  • SLPhoneClient:Windows Phone 7 Silverlight项目,包含一个按钮和一个列表框,用于显示来自ActualServiceForPhone的数据。

ActualService项目包含实际服务的实现,它实现了Person对象的接口。以下是Service1类的一个示例:

public class Service1 : IService1, IServicePolicy { // 实现接口的方法 }

ActualServiceForPhone项目作为桥梁服务,它调用ActualService服务。

IPerson项目定义了服务和客户端都使用的接口。以下是IService1接口的一个示例:

[ServiceContract] public interface IService1 { // 定义服务操作 }

ServiceHost项目是一个控制台应用程序,用于托管WCF服务。以下是启动服务的代码示例:

using (ServiceHost host = new ServiceHost(typeof(Service1), new Uri[] { new Uri("http://localhost:60011", UriKind.Absolute) })) { // 打开服务 host.Open(); Console.ReadLine(); // 关闭服务 host.Close(); }

这两个项目是Silverlight 4.0的默认模板项目,包含一个按钮和一个网格,用于显示来自ActualService WCF服务的数据。

SLPhoneClient项目是一个Windows Phone 7Silverlight项目,包含一个按钮和一个列表框,用于显示来自ActualServiceForPhone的数据。

运行项目

要运行项目,请按照以下步骤操作:

  1. 下载附带的解决方案压缩文件。
  2. 启动Visual Studio 2010并打开解决方案文件,编译所有项目。
  3. 以管理员权限启动ServiceHost(在管理员模式下启动cmd)。
  4. 将ActualServiceForPhone设置为'启动项目'并按F5(确保服务正在运行,记得检查端口号)。
  5. 要运行SLClient(将'启动项目'切换到此项目并按F5)。
  6. 类似地,要测试Windows Phone 7,请将SLPhoneClient设置为'启动项目'并按F5。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485