2013-09-24 75 views
1

我在ServiceStack中编写了一个接受文件上传的web服务。 为了测试它,我用下面的代码:处理文件上传的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(); 

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

如何修复/调试?

+0

您是否解决了您的问题? – stefan2410

+0

不,我尝试了AllowWriteStreamBuffering = true,并没有奏效。我还没有设法安装远程调试器。我正在评论代码并进行部署,以便我可以指出问题出在哪里。我希望有一种方法可以获得堆栈跟踪。 – Gerson

+0

你有服务栈记录吗?你有没有防火墙,阻止服务器的端口?你可以写和服务器的代码? – stefan2410

回答

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

修复了这个问题。问题出在另一部分代码上。 我设法通过服务栈记录查找。

+0

这不是一个答案。我们试图帮助您并分享我们的经验,并且您遵循了有关ServiceStack日志记录的建议。在接受自己的答案之前,至少要分享一些细节以改善常用知识库,以便我们也可以投票。 – stefan2410

+0

我使用的第三方库之一是30天的试用版。我的本地机器在30天的试用期内运行。远程机器不是因为30天的试用期已过。我不知道,因为它给了我一个500。使用日志记录,错误被记录下来。我向供应商询问了一个扩展,获得并应用了它,并且工作。 – Gerson

相关问题