2011-10-14 224 views
1

我想在Windows服务上托管一个WCF服务。基本上WCF服务从同一台机器上的后端数据库读取数据。现在从ASP.NET服务器在同一台机器上,我想读取WCF服务从数据库中读取的数据。任何人都可以提供正确的方法来执行此操作?而且还必须使用相同的绑定。ASP.net服务器连接与WCF服务托管在Windows服务

+0

只需从您的ASP.NET应用程序调用该服务!?!?! –

+1

默认情况下WCF是“每次通话”,例如,每次调用都将创建一个新的服务类,它将读取一些数据,将其返回,然后进行处理。没有“已经读过的数据”在WCF运行时系统的任何地方徘徊...... –

+0

@marc_s我的意思是我想要将后端数据库的记录读入asp.netweb页面,以通过此WCF服务生成报告。 –

回答

1

从您的意见中可以看出,您的目标是让相同的WCF后端拥有不同的用户界面。下面是关于一些信息,以结合:

  • 对于同一台机器上访问WCF服务,最好的结合将是named pipe binding。但是,命名管道绑定不能从其他机器访问。

  • 万一您必须从其他机器访问服务,您应该去TCP Binding。请注意,命名管道和TCP绑定将仅从.NET客户端使用(这对您来说不应该是个问题)。最后,如果您不得不通过互联网公开服务和/或他们需要互操作,您可以选择BasicHttpBindingWSHttpBindingWSHttpBindingWSHttpBinding。但是,我会为内部/私人消费和外部/公共消费提供不同的服务接口。

  • 最后,您可以通过配置轻松更改绑定,因此您可以选择名称管道,并可能将其更改为tcp绑定。此外,它可能具有不同绑定的不同端点上的相同服务。

现在,在远程托管WCF时,您可以将其托管在Windows服务或IIS中。 IIS的优势在于您已经测试过可扩展的主机,可以通过UI提供很少的管理选项。另一方面,使用IIS(作为Web服务器),您不能使用命名管道或tcp绑定。使用较新的Windows服务器,您甚至可以借助WAS(Windows激活服务)消除这种不利因素。

最后,你有没有考虑过使用常见的进程内层而不是像WCF这样的进程外层?例如,您可以拥有一个通用库(或一组库),可以通过清晰的API提供业务逻辑/数据访问。相同的库可用于不同的UI,如ASP.NET和窗体 - UI必须使用接口和工厂(或DI框架)来访问该层。优势在于您可以通过进行中的调用获得性能提升。另一方面,使用进程内层的桌面客户端无法轻松缩放或无法通过互联网使用。基于WCF的应用程序服务器解决了这些问题。我更喜欢创建将由基于服务器的UI(如ASP.NET)使用的进程内层,而基于客户端的UI在同一进程内层使用WCF外观。

1

从我了解你正在试图做的会是这样的:
ASP.Net应用程序 - > WCF服务 - > DB

应用程序调用的方法对WCF服务,它从数据库读取一些数据并创建一个报告并将其发送回应用程序。如果这是意图,应用程序和服务都在同一台机器上,那么你可以使用命名管道绑定,这是非常快的,并且是同一台机器上系统的首选通信方式。你也可以使用更具扩展性的http绑定。但是WCF框架的巨大优势在于,您可以轻松更改绑定而不影响功能。所以,我建议你使用命名管道(net.pipe://),然后在需要时切换到Http。

1

使用WCF只是为了保持代码分离的情况下,你希望或需要去另一个UI是不合逻辑的。你可以做的是将所有的逻辑写入单独的程序集。当你在WCF中实现它时,你最终会这样做。 WCF只是一个托管框架,并将底层程序集托管在一个进程外主机中。如果您有一个服务使用者,并且您希望将其托管在同一台计算机上(如后),则可能已在进程中使用它。您的代码隐藏代码可以引用单独程序集中的数据访问类。您通过代理访问WCF服务时所做的同样的事情。