【发布时间】:2020-09-22 15:00:24
【问题描述】:
我是否可以要求另一种方法来包含流文件,将其作为参数与其他参数一起传递,如下所示,我的代码通过 post 方法将其传递给我的 WCF 服务。我是初学者,所以我不确定如何处理这件事。我故意没有放端口号。使用我的代码,我遇到此错误“无法序列化 System.Web.HttpInputStream”。这就是为什么我需要找到其他方式来传递参数。
客户端代码:
FileVariables fileInput = new FileVariables
{
fileName = FileUpload1.FileName,
fileContents = FileUpload1.FileContent,
Username = txtUsername.Text,
Password = txtPassword.Text
};
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(FileVariables));
MemoryStream ms = new MemoryStream();
json.WriteObject(ms, fileInput);
string data = Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length);
WebClient webClient = new WebClient();
webClient.Headers["Content-type"] = "application/json";
webClient.Encoding = Encoding.UTF8;
webClient.UploadString("http://localhost/TestService.svc/REST/UploadFile", "POST", data);
WCF 服务:
public interface ITestService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/UploadFile",
BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
string UploadFile(FileVariables file);
}
[DataContract]
public class FileVariables
{
[DataMember(Order = 1)]
public string fileName { get; set; }
[DataMember(Order =2)]
public Stream fileContents { get; set; }
[DataMember(Order = 3)]
public string Username { get; set; }
[DataMember(Order = 4)]
public string Password { get; set; }
}
【问题讨论】:
-
FileUpload1 有什么类型?
-
这是一个aspx中的文件上传工具
-
我不是专家,但我认为您不能通过 wcf 调用发送流。尝试从您的 FileUpload 工具中读取一个字节数组。