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

时间:2016-11-23 17:10:01

标签: c# ajax wcf

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

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

ID为fileUpload1的元素只是"输入"的类型的普通元素。

这是我的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。

    1. 在Chrome中,ajax调用失败,错误为" net :: ERR_INVALID_HANDLE" ....尽管如此,每次使用stream-object中的有效数据时都会调用UploadFile X次。
  2. 任何人都知道为什么这样做?对我来说完全是无稽之谈。我尝试使用WebInvoke属性以不同的方式装饰interface-method,如在Google上描述的许多地方,并在ajax-call中将内容类型设置为json,xml和whatnot,但唯一的组合使它一直到service-method是保留内容类型未指定(或设置为" false")。

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

    我考虑过在调用方法之后我是否与处理流的方式有关(比如你不读取流中的所有数据,那么WCF可能&#34提供"它再次将该方法作为完全清空它的机会,但它是一个很长的镜头并且没有工作)。

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

1 个答案:

答案 0 :(得分:0)

除了直接执行服务外,您还可以在诸如SOAP UI或Postman之类的工具上进行测试,这些工具具有的属性仅在您调用时才被调用一次,而不是通过浏览器对调用方法n拥有自己的属性进行测试,但没有时间可以得到任何响应

因此您可以使用工具然后实施。

我多次面对这些问题。