所以现在我正在构建一个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
}
任何人都知道问题是什么?我可能想念的是什么?
谢谢!
答案 0 :(得分:0)
我不知道您试图写入哪个特定的ISO-8583实现,但根据我看到或未看到的内容以及您的实际问题进行了几次猜测。 当它作为客户端与远程服务器进行通信而不是两者兼而有之时,它似乎特别奇怪。您的通讯配置在哪里?
这指向您的TCP / IP配置,我的猜测是您尝试在同一端口上侦听和通信,因此并未真正完成TCP / IP握手。虽然我相信你在技术上可以在一个端口上进行监听并将其用于不同的进程,但我认为这会使事情变得不必要地复杂化。
所以我的猜测正在发生的事情并且你的问题是你试图与自己沟通,可能没有完全连接而不是说&#34; 91 - 发行人没有可用&#34;或&#34; 96 - 系统错误&#34;它给你奇怪的&#34; 67其他错误&#34;因为它可能无法实际发送它。
你有没有跟踪,或者你有没有看过与netstat -a 1甚至更好的Wireshark的连接,如果你没有跟踪来验证你是否已经完全建立?