タイトルは次のように書き換えられます: 127.0.0.1:3446 への接続はターゲット マシンによって積極的に拒否されました
P粉497463473
2023-08-27 13:30:24
<p>WCF4.0 テンプレート -REST を使用しています。ストリームを使用してファイルをアップロードするメソッドを作成しようとしています。</p>
<p>问問題は</p>で発生しました。
<pre class="brush:php;toolbar:false;">Stream serverStream = request.GetRequestStream();</pre>
<p>流式传输类:</p>
<pre class="brush:php;toolbar:false;">名前空間 LogicClass
{
パブリック クラス StreamClass : IStreamClass
{
public bool UploadFile(文字列ファイル名、ストリームファイルストリーム)
{
試す
{
FileStream fileToupload = new FileStream(ファイル名, FileMode.Create);
byte[] bytearray = 新しいバイト[10000];
int bytesRead、totalBytesRead = 0;
する
{
bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
totalBytesRead = バイト読み取り;
while (bytesRead > 0);
fileToupload.Write(bytearray, 0, bytearray.Length);
fileToupload.Close();
fileToupload.Dispose();
}
catch (例外 ex) { throw new Exception(ex.Message); }
true を返します。
}
}
}</pre>
<p>残りの项目:</p>
<pre class="brush:php;toolbar:false;">[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public bool AddStream(文字列ファイル名, System.IO.Stream fileStream)
{
LogicClass.FileComponentrest = new LogicClass.FileComponent();
returnrest.AddStream(ファイル名, ファイルストリーム);
}</pre>
<p>Windows 窗体项目:测试用</p>
<pre class="brush:php;toolbar:false;">private void button24_Click(object sender, EventArgs e)
{
byte[] ファイルストリーム;
using (FileStream fs = new FileStream("E:\stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
fileStream = 新しいバイト[fs.Length];
fs.Read(fileStream, 0, (int)fs.Length);
fs.Close();
fs.Dispose();
}
文字列baseAddress = "http://localhost:3446/File/AddStream/stream.txt";
HttpWebRequest リクエスト = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
request.Method = "POST";
request.ContentType = "テキスト/プレーン";
ストリームserverStream = request.GetRequestStream();
serverStream.Write(fileStream, 0, fileStream.Length);
サーバーストリーム.クローズ();
(HttpWebResponse 応答 = request.GetResponse() を HttpWebResponse として使用)
{
int statusCode = (int)response.StatusCode;
StreamReader リーダー = new StreamReader(response.GetResponseStream());
}
}</pre>
<p>私たちはセキュリティとインターネット接続を遮断しましたが、依然として危険な状況が存在します。アップロード方法をテストするより良い方法はありますか? </p>
<p>スタック トレース: </p>
<ブロック引用>
<p>At System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress ソケット アドレス)
System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& ソケット、IPAddress& アドレス、ConnectSocketState 状態、IAsyncResult asyncResult、Int32 タイムアウト、Exception& 例外)</p> で
</blockquote><p><br /></p>
コンピュータを再起動する必要はありません。代わりに、IIS を再起動してください。
「アクティブな拒否」は、接続しようとしたときにホストが確認応答の代わりにリセットを送信したことを意味します。したがって、これはコードの問題ではありません。ファイアウォールが接続をブロックしているか、サービスをホストしているプロセスがポートをリッスンしていません。これは、まったく実行されていない、または別のポートでリッスンしていることが原因である可能性があります。
サービスをホストするプロセスを開始した後、
netstat -anb
(管理者権限が必要) を使用して、サービスが実行され、予期されたポートでリッスンしていることを確認します。更新: Linux では、
netstat -anp
を実行する必要がある場合があります。