1. ホーム
  2. c#

[解決済み] ターゲットマシーンが積極的に拒否したため、接続できませんでした 127.0.0.1:3446

2023-06-06 03:24:48

質問

WCF4.0テンプレートを使用しています。 REST . 私は、ストリームを使用してファイルをアップロードするメソッドを作成しようとしています。

で常に問題が発生します。

Stream serverStream = request.GetRequestStream();

ストリーミング用のクラスです。

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;
        }
    }
}

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);
}

Windows Formプロジェクト: テスト用

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());
    }
}

ファイアウォールをオフにし、インターネット接続もオフにしたのですが、まだエラーは続いています。アップロード方法をテストする良い方法はないでしょうか?

スタックトレースです。

at System.Net.Sockets.Socket.DoConnect(EndPointのendPointSnapshot, SocketAddressのsocketAddress) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)

どのように解決するのですか?

Actively refused it" は、接続しようとしたときに、ホストが ack の代わりに reset を送信したことを意味します。したがって、あなたのコードに問題があるわけではありません。 ファイアウォールが接続をブロックしているか、サービスをホストしているプロセスがそのポートでリッスンしていないかのいずれかです。これは、まったく実行されていないか、別のポートでリッスンしていることが原因である可能性があります。

サービスをホストしているプロセスを起動したら、次のことを試してみてください。 netstat -anb (管理者権限が必要です) を実行して、期待したポートで実行されていることを確認してください。

の更新が必要です。Linux では、次のようにする必要があるかもしれません。 netstat -anp とする必要があるかもしれません。