我有一个Web服务,其中包含类似以下的方法
[WebMethod]
public string UploadFile(byte[] bytes, string file_name)
{
}
我想使用HttpWebRequest调用此Web服务方法,以便我可以在不缓冲内存的情况下流式传输文件。怎么做...我试着按如下方式调用它
HttpWebRequest hw = HttpWebRequest.Create("http://localhost/xxx/xxx.asmx/Upload") as HttpWebRequest;
hw.ContentType = "application/x-www-form-urlencoded";
hw.AllowWriteStreamBuffering = false;
hw.Method = "POST";
hw.UnsafeAuthenticatedConnectionSharing = true;
hw.UserAgent = "test type";
hw.Credentials = CredentialCache.DefaultCredentials;
FileInfo fi = new FileInfo("C:/Documents and Settings/Administrator/Desktop/a.txt");
string bytes = "bytes=";
byte[] by = UTF8Encoding.UTF8.GetBytes(bytes);
byte[] fn = UTF8Encoding.UTF8.GetBytes("&file_name=a.txt");
hw.ContentLength = by.Length+fi.Length+fn.Length;
using (Stream postStream = hw.GetRequestStream())
{
FileStream br = new FileStream("C:/Documents and Settings/Administrator/Desktop/a.txt", FileMode.Open, FileAccess.Read);
postStream.Write(by, 0, by.Length);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while (true)
{
bytesRead = br.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
postStream.Write(buffer, 0, bytesRead);
}
br.Close();
postStream.Write(fn, 0, fn.Length);
postStream.Write(ct, 0, ct.Length);
}
// HERE :
using (HttpWebResponse response = hw.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string sssdd = reader.ReadToEnd();
}
但它显示一条消息“远程服务器返回错误:(500)内部服务器错误。”执行** // HERE:**标记的行。
btw:我使用的是asp.net 2.0,我不允许使用代理类,因为我的要求是为大文件传输数据。提前致谢
答案 0 :(得分:1)
在浏览器中打开http://localhost/xxx/xxx.asmx/Upload
,ASP.NET将为您提供一个示例POST请求,您需要发送以调用该方法。从那里开始。
答案 1 :(得分:1)
已经有一段时间了,因为我搞砸了这些东西,但我认为你可以在代理类中获得底层的HttpRequest。可能比将自己的SOAP变为POST更容易。
答案 2 :(得分:0)
如果它说远程服务器返回错误,那么您应该查看远程服务器以查看错误是什么。查看服务器上的事件日志,查看收到错误时的事件。
答案 3 :(得分:0)
删除以下行:
postStream.Write(by, 0, by.Length);
.
.
.
postStream.Write(fn, 0, fn.Length);
postStream.Write(ct, 0, ct.Length);