fib*_*ics 67 c# rest wcf httpwebrequest
我正在使用WCF4.0模板 - REST.我正在尝试创建一个使用流上传文件的方法.
问题总是发生在
Stream serverStream = request.GetRequestStream();
Run Code Online (Sandbox Code Playgroud)
流媒体类:
namespace LogicClass
{
public class StreamClass : IStreamClass
{
public bool UploadFile(string filename, Stream fileStream)
{
try
{
FileStream fileToupload = new FileStream(filename, 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();
}
catch (Exception ex) { throw new Exception(ex.Message); }
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
REST项目:
[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public bool AddStream(string filename, System.IO.Stream fileStream)
{
LogicClass.FileComponent rest = new LogicClass.FileComponent();
return rest.AddStream(filename, fileStream);
}
Run Code Online (Sandbox Code Playgroud)
Windows窗体项目:用于测试
private void button24_Click(object sender, EventArgs e)
{
byte[] fileStream;
using (FileStream fs = new FileStream("E:\\stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
fileStream = new byte[fs.Length];
fs.Read(fileStream, 0, (int)fs.Length);
fs.Close();
fs.Dispose();
}
string baseAddress = "http://localhost:3446/File/AddStream/stream.txt";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
request.Method = "POST";
request.ContentType = "text/plain";
Stream serverStream = request.GetRequestStream();
serverStream.Write(fileStream, 0, fileStream.Length);
serverStream.Close();
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
int statusCode = (int)response.StatusCode;
StreamReader reader = new StreamReader(response.GetResponseStream());
}
}
Run Code Online (Sandbox Code Playgroud)
我关闭了防火墙和我的Internet连接,但错误仍然存在.有没有更好的方法来测试上传方法?
堆栈跟踪:
System.Net.Socket.Net.Service.ConnectSocketInternal上的System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)(布尔值connectFailure,套接字s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,Int32超时,异常和例外)
Yau*_*aur 130
"主动拒绝它"意味着当您尝试连接时,主机发送了重置而不是确认.因此,您的代码不是问题.有防火墙阻止连接或托管服务的进程没有侦听该端口.这可能是因为它根本没有运行,或者因为它正在侦听不同的端口.
一旦启动托管服务的进程,请尝试netstat -anb
(需要管理员权限)以验证它是否正在运行并侦听预期的端口.
更新:在Linux上,您可能需要做netstat -anp
.
gra*_*vic 13
您不必重新启动PC.改为重新启动IIS.
运行 - >'cmd'(作为管理员)并输入"iisreset"
归档时间: |
|
查看次数: |
463051 次 |
最近记录: |