单个ajax发布到WCF服务多次调用服务方法

问题描述 投票:0回答:1

我正在尝试将文件上传到WCF服务。这是我的ajax帖子。

 $.ajax({
     cache: false,
     url: "MyService.svc/UploadFile",
     type: "POST",
     data: document.getElementById("fileUpload1").files[0],
     processData: false
 });

ID为fileUpload1的元素只是“input”类型的普通元素。

这是我的WCF操作。

接口:

[OperationContract]
[WebInvoke(Method = "POST")]
ScriptResult UploadFile(Stream stream);

执行:

    public ScriptResult UploadFile(Stream stream) {
        try {
            var ms = new MemoryStream();
            stream.CopyTo(ms);

            File.WriteAllBytes(@"C:\Folder1\somefilename.someExtension", ms.ToArray());

            return Result("OK");
        } catch (Exception e) {
            Logger.Error(e);

            return Error(e);
        }
    }

上面的解决方案工作正常,除了两件事:

  1. UploadFile方法被多次调用,这意味着文件被覆盖了X次。要保存的文件的最后一个版本是完全有效的(只要我手动将文件的扩展名更改为实际文件类型)。调用该方法的次数取决于我选择上传哪个文件。也许它与文件的大小有关 - 也许不是。我无法在此行为中找到任何模式,但所有调用肯定都包含完整且有效的Stream。 在Chrome中,ajax调用失败,错误为“net :: ERR_INVALID_HANDLE”....即使上传文件被调用X次 - 每次都使用stream-object中的有效数据。

任何人都知道为什么这样工作?对我来说完全是无稽之谈。我尝试使用WebInvoke属性以不同的方式装饰interface-method,如在Google上描述的许多地方,并在ajax-call中将内容类型设置为json,xml和whatnot,但唯一的组合使它一直到service-method保留content-type unspecified(或设置为“false”)。

我试过这个:WCF service multiple method calls one ajax request没有运气。

我考虑过是否与调用方法后处理流的方式有关(如果你没有从流中读取所有数据,那么WCF可能会再次“提供”它作为n'的方法有机会彻底清空它,但这是一个很长的镜头而且没有用)。

有什么想法吗?提前致谢。

c# ajax wcf
1个回答
0
投票

您可以在SOAP UI或Postman之类的工具上测试,而不是直接实现服务,这些工具只有在您使用浏览器进行调用时才调用一次属性,而不是使用浏览器调用方法n没有时间,仍然可以得到任何响应。

所以你可以使用工具然后实现。

我多次遇到这些问题。

© www.soinside.com 2019 - 2024. All rights reserved.