我目前正试图了解一下ASP.NET开发环境的WCF服务,我相信我做得很好,除了让我难以理解的一件事。
基本上,我已经设置了WCF服务(让我们采用默认设置,添加构造函数):
public class MyService : IMyService
{
public MyService() { /* blah */ }
public DoWork() { /* blah */ }
}
IMyService
界面将DoWork()
方法定义为[OperationContract]
,应该如此。
所以我在VS2010用户界面上通过添加服务参考在另一个项目中引用了这个服务(比如一个[Unit]测试项目)。这将创建一个MyServiceClient
的引用,它应该公开我的WCF服务方法。
然而,当我在我的测试项目中这样做时:
ServiceReference.IMyService service;
service = new ServiceReference.MyServiceClient();
... MyService()
构造函数未被调用,主要是因为我实例化MyServiceClient
,而不是MyService
本身。
如何调用该构造函数?我打算将其用于初始化目的(例如,在分层实现中抓取一个层?)。
答案 0 :(得分:6)
当您从客户端提出请求时,将在服务器上调用该构造函数。
创建Web服务的“引用”(然后使用客户端类)与引用常规.DLL非常不同。您的所有服务代码都将在服务器端运行,但直到调用服务...
答案 1 :(得分:1)
为每个请求调用服务器端构造函数的唯一方法是将InstanceContextMode设置为PerCall(在ServiceBehavior属性中)。