处理文件上载的Web服务在本地但不是远程工作

时间:2013-09-24 17:18:18

标签: c# .net servicestack

我在ServiceStack中编写了一个接受文件上传的Web服务。 为了测试它,我使用了以下代码:

string filePath = @"C:\myFile.pdf";
string webApi = @"http://localhost:20938/upload/myFile.pdf";

HttpWebRequest client = (HttpWebRequest)WebRequest.Create(webApi);
client.Method = WebRequestMethods.Http.Post;
client.AllowWriteStreamBuffering = false;
client.SendChunked = true;
client.ContentType = "multipart/form-data;";
client.Timeout = int.MaxValue;

using (FileStream fileStream = File.OpenRead(filePath))
{
    fileStream.Copy(client.GetRequestStream());
}

var response = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd();

这适用于localhost,但是当我将其部署到远程服务器时,它不起作用。我收到500内部错误。 (其他返回JSON数据的Web API调用在本地和远程完美地工作)。

如何修复/调试此操作?

3 个答案:

答案 0 :(得分:1)

下面的代码对我有用。 唯一的区别,我可以看到AllowWriteStreamBuffering = true;

            string requestUri = Path.Combine(serverIP + @"/upload/", filename);
            HttpWebRequest client = (HttpWebRequest)WebRequest.Create(requestUri);
            client.Method = WebRequestMethods.Http.Post;

            client.AllowWriteStreamBuffering = true;
            client.SendChunked = true;
            client.ContentType = "multipart/form-data;";
            client.Timeout = int.MaxValue;
            using (FileStream fileStream = File.OpenRead(filePath))
            {
                fileStream.Copy(client.GetRequestStream());
            }
            var response = new StreamReader(client.GetResponse().GetResponseStream()).ReadToEnd();

你有防火墙,阻止端口吗?

答案 1 :(得分:1)

修正了问题。问题在于代码的另一部分。 我设法通过服务堆栈日志找到。

答案 2 :(得分:1)

注意:ServiceStack C# ServiceClientsHttpUtils都支持上传文件 - 有关示例,请参阅FileUploadTests.cs