我正在寻找一些建议来检查这是否可行。
我正在编写一个允许客户端上传文件的wcf服务。
我想在我的Web服务中添加验证层,而无需客户端上传文件。
因此客户端使用该文件向wcf服务发出请求,但在上传之前,我想验证文件名,然后可能向客户端发送请求以发送文件。
我可以在我的网络服务上有2个接口:validatefile()
和uploadfile()
以及validationfile()
的结果,但理想情况下我想通过单一界面进行此操作。
有什么建议吗?
编辑:验证是为了检查文件大小和文件名。因为文件可能是600mb,理想情况下我需要在文件上传之前但在服务中执行检查。
答案 0 :(得分:2)
除非您愿意,否则不需要单独的界面。在同一界面中同时使用Validate和Upload方法是完全可以接受的。
除此之外,如果您想强制消费者首先调用validate,那么您可以从Validate方法返回Guid“key”,然后让消费者将此密钥传递给upload方法。没有上传密钥,没有上传。即使采用这种方法,您也需要在上传中重新验证。
所以你的验证方法看起来像这样:
public string Validate(string fileName)
{
string uploadKey = null;
bool isValid = false;
//Business logic
if (isValid)
{
uploadKey = Guid.NewGuid().ToString();
//store uploadKey
}
return uploadKey;
}
答案 1 :(得分:0)
这整体没有意义。您可以在第一个请求中验证文件名和文件大小,然后客户端可以再发送另一个请求。这将要求您从文件名和大小创建哈希并在服务器上保留哈希。在下一个请求中,您需要验证hash =再次计算哈希值,然后决定:如果您必须在主请求中再次执行此操作,为什么要在单独的请求中验证这些值?如果你不这样做,你的整个设计就会变得脆弱无用。
我的方法是:
仅使用上传方式。将文件名和文件大小放置为SOAP标头并使用流式传输(无论如何您可能会使用它)。 Streaming允许您在开始处理(和加载)流之前读取SOAP标头,以便您可以验证它们并将异常重新发送回客户端而无需加载文件。