0

だから今、私は ISO8583 Payment Gateway アプリケーションを構築しています。このアプリケーションは、クライアントまたはサーバーとして機能できるクライアント/サーバー アプリケーションです。この場合、アプリケーションのクライアント側を処理しています。

最初に、(クライアント) アプリを外部サーバーに接続しました。お問い合わせメッセージを送信していて、うまくいきました(成功メッセージを返します)。次に、このアプリをクライアントとサーバーの両方として実行しようとしています (2 つのアプリを実行し、IP ホストとして IP を設定します)。1 つはクライアントとして、もう 1 つはサーバーとして実行します。照会メッセージを送信していますが、応答コード 67 (その他のエラー) が返され続けます。一方、アプリをクライアントとしてのみ実行すると成功します。

参考になるかわかりませんが、問い合わせ方法はこちら

 /// <summary>
    /// Send Inquiry Message
    /// </summary>
    private void SendInquiryMessage()
    {
        var requestMsg = new Iso8583Message(200);
        DateTime transmissionDate = DateTime.Now;
        requestMsg.Fields.Add(7, string.Format("{0}{1}",
            string.Format("{0:00}{1:00}", transmissionDate.Month, transmissionDate.Day),
            string.Format("{0:00}{1:00}{2:00}", transmissionDate.Hour,
                transmissionDate.Minute, transmissionDate.Second)));
        requestMsg.Fields.Add(11, _sequencer.Increment().ToString());
        requestMsg.Fields.Add((int)ISO8583ProtocolFields.PROCESSING_CODE, "341019");
        requestMsg.Fields.Add((int)ISO8583ProtocolFields.ADDITIONAL_DATA_61, "5271720012002010802012");

        #region Send 0200
        SendRequestHandlerCtrl sndCtrl = _client.SendExpectingResponse(requestMsg, 1000, true, null);
        sndCtrl.WaitCompletion(); // Wait send completion.
        if (!sndCtrl.Successful)
        {
            Console.WriteLine(string.Format("Client: unsuccessful request # {0} ({1}.",
                _sequencer.CurrentValue(), sndCtrl.Message));
            if (sndCtrl.Error != null)
                Console.WriteLine(sndCtrl.Error);
        }
        else
        {
            sndCtrl.Request.WaitResponse();

            if (sndCtrl.Request.IsExpired)
                _expiredRequests++;
            else
                _requestsCnt++;
        }

        latestInquiryMessage = sndCtrl.Request.ReceivedMessage as Iso8583Message;

        Console.WriteLine(latestInquiryMessage.Fields[39].Value);

        #endregion

    }

誰が問題が何であるか知っていますか?私が見逃す可能性のあるものは何ですか?

ありがとうございました!

4

1 に答える 1

0

あなたが書き込もうとしている特定の ISO-8583 実装はわかりませんが、私が見ているものと見ていないもの、およびあなたの実際の質問に基づいていくつか推測します。リモートサーバーとクライアントとして通信しているが、両方として通信していない場合に機能するのは特に奇妙に思えます。通信構成はどこにありますか?

これは TCP/IP 構成を示しており、おそらく同じポートでリッスンして通信しようとしているため、TCP/IP ハンドシェイクを完全に完了していないと推測されます。技術的には、ポートをリッスンして別のプロセスのために通信できると思いますが、それは不必要に複雑になると思います。

だから私の推測では、何が起こっているのか 、そしてあなたの問題は、あなたが自分自身と通信しようとしていて、おそらく完全に接続されていないことであり、「91 - 発行者が利用できません」または「96 - システムエラー」と言う代わりに、それがあなたに与えていることです.実際に送信できなかった可能性があるため、奇妙な「67 other error」。

トレースがありますか、または完全に確立されていることを確認するためのトレースがない場合は、netstat -a 1 またはより良い Wireshark で接続を監視しましたか?

于 2014-09-25T23:25:13.267 に答える