wcf请求客户端

时间:2011-04-20 16:01:10

标签: .net wcf

我正在寻找一些建议来检查这是否可行。 我正在编写一个允许客户端上传文件的wcf服务。 我想在我的Web服务中添加验证层,而无需客户端上传文件。 因此客户端使用该文件向wcf服务发出请求,但在上传之前,我想验证文件名,然后可能向客户端发送请求以发送文件。 我可以在我的网络服务上有2个接口:validatefile()uploadfile()以及validationfile()的结果,但理想情况下我想通过单一界面进行此操作。

有什么建议吗?

编辑:验证是为了检查文件大小和文件名。因为文件可能是600mb,理想情况下我需要在文件上传之前但在服务中执行检查。

2 个答案:

答案 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标头,以便您可以验证它们并将异常重新发送回客户端而无需加载文件。