WCF-来自服务实现的调用方法
我想做的是: 1) 我有以下WCF服务合同:WCF-来自服务实现的调用方法,wcf,service,constructor,contract,Wcf,Service,Constructor,Contract,我想做的是: 1) 我有以下WCF服务合同: [ServiceContract] public interface IUploadService { [OperationContract] ServiceData Upload(Request request); } [DataContract] public class Request { [DataMember] public long AbnNumber; [DataMember] pub
[ServiceContract]
public interface IUploadService
{
[OperationContract]
ServiceData Upload(Request request);
}
[DataContract]
public class Request
{
[DataMember]
public long AbnNumber;
[DataMember]
public string Email;
}
2) 这个合同是这样执行的
public class UploadService : IUploadService
{
public bool Upload(Request request)
{
// Some code
}
}
在“一些代码”部分,我想调用一个验证类来验证客户机请求,如下所示:
var result = validation.ValidateRequest(request);
所以我的问题是:在Upload
方法中创建我的验证类的实例是个坏主意吗?像这样:
public class UploadService : IUploadService
{
public bool Upload(Request request)
{
var validation = new Validation();
var result = validation.ValidateRequest(request);
}
}
我知道您可以通过创建构造函数来解决这个问题,但就我所知,您不能在WCF服务实现类中创建构造函数,还是我错了
我是WCF的新手,所以如果我完全走错了方向,请让我知道
谢谢就我个人而言,我尽可能不喜欢我的服务方式。我将有一个单独的项目来处理上传。这样,您就可以更容易地重用此代码,并且在不创建服务的情况下测试功能 至于是否应该这样创建验证,这实际上取决于它的功能,但通常我会确保验证类实现一个包含ValidateRequest(请求)的接口,然后注入该接口。如果需要,您可以在测试中模拟它 所以你的服务代码看起来像
public class UploadService : IUploadService
{
private readonly IUploadHandler _uploadHandler;
public UploadService(IUploadHandler uploadHandler)
{
_uploadHandler = uploadHandler;
}
public bool Upload(Request request)
{
//would possibly do some mapping here to create a different type of object to pass to the handler
_uploadHandler.Upload(request);
}
}
public class UploadHandler : IUploadHandler
{
private readonly IValidation _validator;
public UploadHandler(IValidation validator)
{
_validator = validator;
}
public bool Upload(Request request)
{
return _validator.ValidateRequest(request);
}
}
另一个项目中的处理程序如下所示
public class UploadService : IUploadService
{
private readonly IUploadHandler _uploadHandler;
public UploadService(IUploadHandler uploadHandler)
{
_uploadHandler = uploadHandler;
}
public bool Upload(Request request)
{
//would possibly do some mapping here to create a different type of object to pass to the handler
_uploadHandler.Upload(request);
}
}
public class UploadHandler : IUploadHandler
{
private readonly IValidation _validator;
public UploadHandler(IValidation validator)
{
_validator = validator;
}
public bool Upload(Request request)
{
return _validator.ValidateRequest(request);
}
}
所以我的问题是:在Upload方法中创建我的验证类的实例是个坏主意吗
这取决于您是使用单件服务还是每次通话服务。通常,最好为每个请求创建新的服务实例,在这种情况下,可以在操作中创建所有实例
关于这个话题的有趣讨论
如果您决定不为每个请求创建验证类,则有两个选项:
谢谢你的回复。我试图实现您的建议,但遇到了以下问题:当使用带参数的构造函数时,我的web服务失败。然后,我尝试向我的
UploadService
类添加一个默认构造函数,如下所示:public UploadService(){}
web服务现在可以工作,但当我执行\u uploadHandler.Upload(请求)时,\u uploadHandler
为空代码>有什么我真正缺少的简单的东西吗?