Trx ISO 8583 ライブラリを使用しました。このライブラリは、メッセージの長さを HEX で送信します。しかし、メッセージ ヘッダーとして 4 バイトの Ascii 文字を送信する必要があります。どうやってするか?
質問する
1571 次
1 に答える
1
メッセージ ヘッダーを変更するには、NboFrameLengthSink クラスを変更する必要があります。Trx=>Communication=>Sinks=>NboFrameLengthSink.cs にあります。
コードの下の public void Send(PipelineContext context) 関数の変更
buffer.Write(true, _bytesInHeader == 2
? new[] {(byte) (length >> 8), (byte) length}
: new[] {(byte) (length >> 24), (byte) (length >> 16), (byte) (length >> 8), (byte) (length)});
に
string ls_length;
ls_length = length.ToString("####").PadLeft(4,'0');
byte[] ascii = System.Text.Encoding.ASCII.GetBytes(ls_length);
buffer.Write(true, _bytesInHeader == 2
? new[] { (byte)(length >> 8), (byte)length }
: ascii);
と
関数内 public bool Receive(PipelineContext context)
コード
context.ExpectedBytes = ( header[0] << 24 ) | ( header[1] << 16 ) | ( header[2] << 8 ) | header[3];
に変更
context.ExpectedBytes = header[0] | header[1] | header[2] | header[3];
Ascii でメッセージを送信する必要があるが、HEX としてビットマップを送信する必要がある場合は、以下を実行します。
IN Iso8583Ascii1987.xml 構成ファイルの変更
<!-- Add first bitmap -->
<Invoke Name="Add">
<Parameter Type="BitMapFieldFormatterFactory">
<Property Name="FieldNumber" Value="0" />
<Property Name="Description" Value="Primary bitmap" />
<Property Name="Encoder" Reference="DataEncoderFactory" />
<Property Name="LowerFieldNumber" Value="1" />
<Property Name="UpperFieldNumber" Value="64" />
</Parameter>
</Invoke>
<!-- Add secondary bitmap (field number 1) -->
<Invoke Name="Add">
<Parameter Type="BitMapFieldFormatterFactory">
<Property Name="FieldNumber" Value="1" />
<Property Name="Description" Value="Secondary bitmap" />
<Property Name="Encoder" Reference="DataEncoderFactory" />
<Property Name="LowerFieldNumber" Value="65" />
<Property Name="UpperFieldNumber" Value="128" />
</Parameter>
</Invoke>
于 2013-07-26T08:16:47.550 に答える