0

所以现在我正在构建一个 ISO8583 支付网关应用程序。此应用程序是一个客户端-服务器应用程序,可以充当客户端或服务器。在这种情况下,我正在处理应用程序的客户端。

起初,我将(客户端)应用程序连接到外部服务器。我正在发送查询消息并且运行良好(返回成功消息)。然后,我尝试将这个应用程序作为客户端和服务器运行(运行 2 个应用程序并将我的 ip 设置为 ip 主机),一个作为客户端,另一个作为服务器。我正在发送查询消息,它一直返回响应代码 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 其他错误”,因为它可能无法实际发送。

如果您没有跟踪来验证您是否已完全建立,您是否有跟踪,或者您是否使用 netstat -a 1 甚至更好的 Wireshark 观察了连接?

于 2014-09-25T23:25:13.267 回答