我需要在用户单击“上传文件”按钮后从网页的前端将 HttpPostedFileBase 发送到 wcf 服务以进行处理,该服务在服务器上运行。我先在服务合同中使用了HttpPostedFileBase,但是没有用。然后我尝试将 HttpPostedFileBase 放入数据合约中,但它仍然不起作用。我挣扎了两天来解决这个问题。现在是方法:
在服务合同中:
[ServiceContract]
public interface IFileImportWcf
{
[OperationContract]
string FileImport(byte[] file);
}
并找到这两种方法将 byte[] 转换为流,反之亦然。
public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
public Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
}
在控制器中:
[HttpPost]
public ActionResult Import(HttpPostedFileBase attachment)
{
//convert HttpPostedFileBase to bytes[]
var binReader = new BinaryReader(attachment.InputStream);
var file = binReader.ReadBytes(attachment.ContentLength);
//call wcf service
var wcfClient = new ImportFileWcfClient();
wcfClient.FileImport(file);
}
我的问题是:将 HttpPostedFileBase 发送到 wcf 服务的更好方法是什么?