Le titre est réécrit comme suit : La connexion à 127.0.0.1:3446 a été activement refusée par la machine cible
P粉497463473
2023-08-27 13:30:24
<p>J'utilise le modèle WCF4.0 -REST. J'essaie de créer une méthode pour télécharger des fichiers à l'aide d'un flux.</p>
<p>问题总是发生在</p>
<pre class="brush:php;toolbar:false;">Stream serverStream = request.GetRequestStream();</pre>
<p>流式传输类:</p>
<pre class="brush:php;toolbar:false;">espace de noms LogicClass
{
classe publique StreamClass : IStreamClass
{
public bool UploadFile (nom de fichier chaîne, Stream fileStream)
{
essayer
{
FileStream fileToupload = new FileStream(filename, FileMode.Create);
octet[] bytearray = nouvel octet[10000];
int bytesRead, totalBytesRead = 0 ;
faire
{
bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
totalBytesRead += octetsRead;
} while (octetsLecture > 0);
fileToupload.Write(bytearray, 0, bytearray.Length);
fileToupload.Close();
fileToupload.Dispose();
}
catch (Exception ex) { throw new Exception (ex.Message); }
renvoie vrai ;
}
}
}</pré>
<p>REST 项目:</p>
<pre class="brush:php;toolbar:false;">[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public bool AddStream (nom de fichier de chaîne, System.IO.Stream fileStream)
{
LogicClass.FileComponent rest = new LogicClass.FileComponent();
return rest.AddStream(filename, fileStream);
}</pré>
<p>Windows 窗体项目:用于测试</p>
<pre class="brush:php;toolbar:false;">bouton vide privé24_Click (expéditeur de l'objet, EventArgs e)
{
octet[] fileStream ;
en utilisant (FileStream fs = new FileStream("E:stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
fileStream = nouvel octet[fs.Length];
fs.Read(fileStream, 0, (int)fs.Length);
fs.Close();
fs.Dispose();
}
chaîne baseAddress = "http://localhost:3446/File/AddStream/stream.txt" ;
Requête HttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
request.Method = "POST";
request.ContentType = "texte/plain";
Stream serverStream = request.GetRequestStream();
serverStream.Write(fileStream, 0, fileStream.Length);
serverStream.Close();
en utilisant (réponse HttpWebResponse = request.GetResponse() comme HttpWebResponse)
{
int statusCode = (int)response.StatusCode ;
Lecteur StreamReader = new StreamReader(response.GetResponseStream());
}
}</pré>
<p>我已误仍然存在。Existe-t-il une meilleure façon de tester la méthode de téléchargement ? </p>
<p>Trace de la pile : </p>
<blockquote>
<p>À System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, adresse de socket SocketAddress)
à System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& adresse, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)</p>
</blockquote><p><br /></p>
Vous n’avez pas besoin de redémarrer votre ordinateur. Au lieu de cela, redémarrez IIS.
« Rejet actif » signifie que l'hôte a envoyé une réinitialisation au lieu d'un accusé de réception lorsque vous avez essayé de vous connecter. Ce n'est donc pas un problème dans votre code. Un pare-feu bloque la connexion ou le processus hébergeant le service n'écoute pas sur le port. Cela peut être dû au fait qu'il ne fonctionne pas du tout ou qu'il écoute sur un autre port.
Après avoir démarré le processus d'hébergement du service, essayez d'utiliser
netstat -anb
(nécessite des droits d'administrateur) pour vérifier qu'il fonctionne et écoute sur le port attendu.Mise à jour : sous Linux, vous devrez peut-être faire
netstat -anp
.