使用RestSharp将文件上载到Web Service

时间:2014-08-26 22:30:42

标签: c# web-services wcf webservice-client restsharp

我尝试创建一个接受多个文件上传的WebService。要将此数据发布到Web服务,请使用RestSharp。

为了这篇文章的目的,我已经删除了代码。

我有我服务的界面:

    [ServiceContract]
public interface ISender
{
    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    int Upload(Stream fileStream);
}

接口的实现:

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Sender : ISender
{
    public int Upload(Stream fileStream)
    {
        FileStream fileToupload = new FileStream(Path.Combine("D:\\FileUpload\\","test.png"), FileMode.Create);

        byte[] bytearray = new byte[10000];
        int bytesRead, totalBytesRead = 0;
        do
        {
            bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
            totalBytesRead += bytesRead;
        } while (bytesRead > 0);

        fileToupload.Write(bytearray, 0, bytearray.Length);
        fileToupload.Close();
        fileToupload.Dispose();

        return 1;
    }
   }

然后使用RestSharp:

调用服务的客户端代码
var client = new RestClient("http://myserviceurl/emailsender/Sender.svc");

        var request = new RestRequest("Upload", Method.POST) {RequestFormat = DataFormat.Json};
        request.AddHeader("Content-Type", "application/octet-stream");
        byte[] bytes = File.ReadAllBytes(Server.MapPath("/img/carousel-sprite-160.png"));
        request.AddFile("fileStream", bytes, "carousel-sprite-160.png", "image/png");


        // execute the request
        var response = client.Execute(request);

如果我可以提出两个问题:

1)Upl​​oad方法中的fileStream参数始终为null - 为什么?我配置错误了什么?其次,如果.AddFile方法正在创建Stream对象,为什么要添加文件名和mime-type,这些都不是流的一部分(可能是FileStream)。

2).AddFile方法可以在同一个请求对象上多次调用。这表明webservice可以接收多个文件 - 但是webservice如何接收多个文件?我无法使用List<Stream>,所以我不明白这是怎么回事。

任何人都可以提供的任何指示都将非常感激。

提前感谢您的时间。

此致 dotdev

0 个答案:

没有答案