我正在尝试将文件上传到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);
}
}
上面的解决方案工作正常,除了两件事:
任何人都知道为什么这样工作?对我来说完全是无稽之谈。我尝试使用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'的方法有机会彻底清空它,但这是一个很长的镜头而且没有用)。
有什么想法吗?提前致谢。
您可以在SOAP UI或Postman之类的工具上测试,而不是直接实现服务,这些工具只有在您使用浏览器进行调用时才调用一次属性,而不是使用浏览器调用方法n没有时间,仍然可以得到任何响应。
所以你可以使用工具然后实现。
我多次遇到这些问题。