1

我在 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 调用在本地和远程都可以完美运行)。

我该如何修复/调试这个?

4

3 回答 3

1

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

于 2013-09-30T21:38:26.313 回答
1

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

于 2013-09-30T19:56:10.677 回答
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();

你有防火墙,阻止端口?

于 2013-09-24T17:38:57.787 回答