kafka consumer .net 'Protocol message end-group tag did not match expected tag.' - asp.net-core

I am trying to read data from kafka as you can see :
var config = new ConsumerConfig
{
BootstrapServers = ""*******,
GroupId = Guid.NewGuid().ToString(),
AutoOffsetReset = AutoOffsetReset.Earliest
};
MessageParser<AdminIpoChange> parser = new(() => new AdminIpoChange());
using (var consumer = new ConsumerBuilder<Ignore, byte[]>(config).Build())
{
consumer.Subscribe("AdminIpoChange");
while (true)
{
AdminIpoChange item = new AdminIpoChange();
var cr = consumer.Consume();
item = parser.ParseFrom(new ReadOnlySpan<byte>(cr.Message.Value).ToArray());
}
consumer.Close();
}
I am using google protobuf for send and receive data .This code returns this error in parser line:
KafkaConsumer.ConsumeAsync: Protocol message end-group tag did not match expected tag.
Google.Protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
at Google.Protobuf.ParsingPrimitivesMessages.CheckLastTagWas(ParserInternalState& state, UInt32 expectedTag)
at Google.Protobuf.ParsingPrimitivesMessages.ReadGroup(ParseContext& ctx, Int32 fieldNumber, UnknownFieldSet set)
at Google.Protobuf.UnknownFieldSet.MergeFieldFrom(ParseContext& ctx)
at Google.Protobuf.UnknownFieldSet.MergeFieldFrom(UnknownFieldSet unknownFields, ParseContext& ctx)
at AdminIpoChange.pb::Google.Protobuf.IBufferMessage.InternalMergeFrom(ParseContext& input) in D:\MofidProject\domain\obj\Debug\net6.0\Protos\Rlc\AdminIpoChange.cs:line 213
at Google.Protobuf.ParsingPrimitivesMessages.ReadRawMessage(ParseContext& ctx, IMessage message)
at Google.Protobuf.CodedInputStream.ReadRawMessage(IMessage message)
at AdminIpoChange.MergeFrom(CodedInputStream input) in D:\MofidProject\domain\obj\Debug\net6.0\Protos\Rlc\AdminIpoChange.cs:line 188
at Google.Protobuf.MessageExtensions.MergeFrom(IMessage message, Byte[] data, Boolean discardUnknownFields, ExtensionRegistry registry)
at Google.Protobuf.MessageParser`1.ParseFrom(Byte[] data)
at infrastructure.Queue.Kafka.KafkaConsumer.ConsumeCarefully[T](Func`2 consumeFunc, String topic, String group) in D:\MofidProject\infrastructure\Queue\Kafka\KafkaConsumer.cs:line 168
D:\MofidProject\mts.consumer.plus\bin\Debug\net6.0\mts.consumer.plus.exe (process 15516) exited with code -1001.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.'
Updated:
My sample data that comes from Kafka :
- {"SymbolName":"\u0641\u062F\u0631","SymbolIsin":"IRo3pzAZ0002","Date":"1400/12/15","Time":"08:00-12:00","MinPrice":17726,"MaxPrice":21666,"Share":1000,"Show":false,"Operation":0,"Id":"100d8e0b54154e9d902054bff193e875","CreateDateTime":"2022-02-26T09:47:20.0134757+03:30"}
My rlc Model :
syntax = "proto3";
message AdminIpoChange
{
string Id =1;
string SymbolName =2;
string SymbolIsin =3;
string Date =4;
string Time=5;
double MinPrice =6;
double MaxPrice =7;
int32 Share =8;
bool Show =9;
int32 Operation =10;
string CreateDateTime=11;
enum AdminIpoOperation
{
Add = 0;
Edit = 1;
Delete = 2;
}
}
My data in bytes :
7B 22 53 79 6D 62 6F 6C 4E 61 6D 65 22 3A 22 5C 75 30 36 34 31 5C 75 30 36 32 46 5C 75 30
36 33 31 22 2C 22 53 79 6D 62 6F 6C 49 73 69 6E 22 3A 22 49 52 6F 33 70 7A 41 5A 30 30 30
32 22 2C 22 44 61 74 65 22 3A 22 31 34 30 30 2F 31 32 2F 31 35 22 2C 22 54 69 6D 65 22 3A
22 30 38 3A 30 30 2D 31 32 3A 30 30 22 2C 22 4D 69 6E 50 72 69 63 65 22 3A 31 37 37 32 36
2C 22 4D 61 78 50 72 69 63 65 22 3A 32 31 36 36 36 2C 22 53 68 61 72 65 22 3A 31 30 30 30
2C 22 53 68 6F 77 22 3A 66 61 6C 73 65 2C 22 4F 70 65 72 61 74 69 6F 6E 22 3A 30 2C 22 49
64 22 3A 22 31 30 30 64 38 65 30 62 35 34 31 35 34 65 39 64 39 30 32 30 35 34 62 66 66 31
39 33 65 38 37 35 22 2C 22 43 72 65 61 74 65 44 61 74 65 54 69 6D 65 22 3A 22 32 30 32 32
2D 30 32 2D 32 36 54 30 39 3A 34 37 3A 32 30 2E 30 31 33 34 37 35 37 2B 30 33 3A 33 30 22
7D

The data is definitely not protobuf binary; byte 0 starts a group with field number 15; inside this group is:
field 4, string
field 13, fixed32
field 6, varint
field 12, fixed32
field 6, varint
after this (at byte 151), an end-group token is encountered with field number 6
There are many striking things about this:
your schema doesn't use groups (in fact, the mere existence of groups is now hard to find in the docs), so ... none of this looks right
end-group tokens are always required to match the last start-group field number, which it doesn't
fields inside a single level are usually (although as a "should", not a "must") written in numerical order
you have no field 12 or 13 declared
your field 6 is of the wrong type - we expect fixed64 here, but got varint
So: there's no doubt about it: that data is ... not what you expect. It certainly isn't valid protobuf binary. Without knowing how that data is stored, all we can do is guess, but on a hunch: let's try decoding it as UTF8 and see what it looks like:
{"SymbolName":"\u0641\u062F\u0631","SymbolIsin":"IRo3pzAZ0002","Date":"1400/12/15","Time":"08:00-12:00","MinPrice":17726,"MaxPrice":21666,"Share":1000,"Show":false,"Operation":0,"Id":"100d8e0b54154e9d902054bff193e875","CreateDateTime":"2022-02-26T09:47:20.0134757+03:30"}
or (formatted)
{
"SymbolName":"\u0641\u062F\u0631",
"SymbolIsin":"IRo3pzAZ0002",
"Date":"1400/12/15",
"Time":"08:00-12:00",
"MinPrice":17726,
"MaxPrice":21666,
"Share":1000,
"Show":false,
"Operation":0,
"Id":"100d8e0b54154e9d902054bff193e875",
"CreateDateTime":"2022-02-26T09:47:20.0134757+03:30"
}
Oops! You've written the data as JSON, and you're trying to decode it as binary protobuf. Decode it as JSON instead, and you should be fine. If this was written with the protobuf JSON API: decode it with the protobuf JSON API.

Related

Strange encoding in PDF property fields

I have a question about how the document properties (Title, Author, etc.) are stored in a PDF file. It looks like UTF-16 in big-endian byte order.
So "MyName" will be encoded as:
FE FF 00 4D 00 79 00 4E 00 61 00 6D 00 65
However, I run into this character "-" which should have value FF 0D, but I find in its place these hex number FF 5C 72
So "My-Name" looks like this:
FE FF 00 4D 00 79 FF 5C 72 00 4E 00 61 00 6D 00 65
Anybody knows why FF 5C 72 is used here? Why 3 bytes when everywhere else is UTF-16? Why these values?
You are not interpreting correctly what you see:
FE FF is the start of a sequence.
00 is a null byte.
4D in your case most likely translates to M.
79 in your case most likely translates to y.
4E in your case most likely translates to N.
61 in your case most likely translates to a.
6D in your case most likely translates to m.
65 in your case most likely translates to e.
Compare this to the output of my simple ascii command line tool, which prints a list of all ASCII aliases as a table with their hex and dec encodings:
$ ascii -h
Usage: ascii [-dxohv] [-t] [char-alias...]
-t = one-line output -d = Decimal table -o = octal table -x = hex table
-h = This help screen -v = version information
Prints all aliases of an ASCII character. Args may be chars, C \-escapes,
English names, ^-escapes, ASCII mnemonics, or numerics in decimal/octal/hex.
Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex
0 00 NUL 16 10 DLE 32 20 48 30 0 64 40 # 80 50 P 96 60 ` 112 70 p
1 01 SOH 17 11 DC1 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q
2 02 STX 18 12 DC2 34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r
3 03 ETX 19 13 DC3 35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s
4 04 EOT 20 14 DC4 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t
5 05 ENQ 21 15 NAK 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u
6 06 ACK 22 16 SYN 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v
7 07 BEL 23 17 ETB 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w
8 08 BS 24 18 CAN 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x
9 09 HT 25 19 EM 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y
10 0A LF 26 1A SUB 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z
11 0B VT 27 1B ESC 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B {
12 0C FF 28 1C FS 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C |
13 0D CR 29 1D GS 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D }
14 0E SO 30 1E RS 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~
15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F DEL
Oh, surprise!
This table matches my "assumptions" from above perfectly. So you can savely re-consider your own ones about "UTF-16 in big-endian byte order".
And that means for your hex number in question, FF 5C 72?!?
Well, look it up: FF you can skip, 5C 72 is \r... Which means? (Answer left as excercise to the reader)

Does AVRO schema also get encoded in the binary part?

An Avro file contains the schema in plain text followed by the data in binary format. I'd like to know whether the schema (or some part of it) also exists in the binary part? I got a hunch that the schema (or just the field names) also get coded in the binary part because when I make some changes in the plain schema part of an AVRO file I get an error message when exporting the schema using the Avro-tool.jar .
When the binary encoding is used, the whole file is using a binary format.
The file starts with a 4 bytes header, then a map containing some metadata immediately follows. This map contains a "avro.schema" entry. The value of this entry is the schema stored as a string. After the map you will find your data.
If you edit the schema manually, read change its size, then length prefix stored just before this string will be incoherent and the file is corrupted.
See Binary encoding specification to learn how various types are binary encoded.
I'm not sure what you are trying to achieve, and I quite sure that is should not be done. But for fun, lets try to edit the schema in place.
For this example I will use the weather.avro file from the avro's source tree:
$ java -jar avro-tools-1.8.0.jar getmeta weather-orig.avro
avro.codec null
avro.schema {"type":"record","name":"Weather","namespace":"test","fields":[{"name":"station","type":"string"},{"name":"time","type":"long"},{"name":"temp","type":"int"}],"doc":"A weather reading."}
$ java -jar avro-tools-1.8.0.jar getschema weather-orig.avro
{
"type" : "record", "name" : "Weather", "namespace" : "test", "doc" : "A weather reading.",
"fields" : [
{"name" : "station", "type" : "string"},
{"name" : "time", "type" : "long"},
{"name" : "temp", "type" : "int"}
]
}
$ java -jar /avro-tools-1.8.0.jar tojson weather-orig.avro
{"station":"011990-99999","time":-619524000000,"temp":0}
{"station":"011990-99999","time":-619506000000,"temp":22}
{"station":"011990-99999","time":-619484400000,"temp":-11}
{"station":"012650-99999","time":-655531200000,"temp":111}
{"station":"012650-99999","time":-655509600000,"temp":78}
OK. This is our source file. Plain simple, two metadata entries and the schema defines three fields. Now, we will try to understand how things are stored in binary and how we can edit the file to change the rename station int station-id.
$ hexdump weather-orig.avro -n 256 -C
00000000 4f 62 6a 01 04 14 61 76 72 6f 2e 63 6f 64 65 63 |Obj...avro.codec|
00000010 08 6e 75 6c 6c 16 61 76 72 6f 2e 73 63 68 65 6d |.null.avro.schem|
00000020 61 f2 02 7b 22 74 79 70 65 22 3a 22 72 65 63 6f |a..{"type":"reco|
00000030 72 64 22 2c 22 6e 61 6d 65 22 3a 22 57 65 61 74 |rd","name":"Weat|
00000040 68 65 72 22 2c 22 6e 61 6d 65 73 70 61 63 65 22 |her","namespace"|
00000050 3a 22 74 65 73 74 22 2c 22 66 69 65 6c 64 73 22 |:"test","fields"|
00000060 3a 5b 7b 22 6e 61 6d 65 22 3a 22 73 74 61 74 69 |:[{"name":"stati|
00000070 6f 6e 22 2c 22 74 79 70 65 22 3a 22 73 74 72 69 |on","type":"stri|
00000080 6e 67 22 7d 2c 7b 22 6e 61 6d 65 22 3a 22 74 69 |ng"},{"name":"ti|
00000090 6d 65 22 2c 22 74 79 70 65 22 3a 22 6c 6f 6e 67 |me","type":"long|
000000a0 22 7d 2c 7b 22 6e 61 6d 65 22 3a 22 74 65 6d 70 |"},{"name":"temp|
000000b0 22 2c 22 74 79 70 65 22 3a 22 69 6e 74 22 7d 5d |","type":"int"}]|
000000c0 2c 22 64 6f 63 22 3a 22 41 20 77 65 61 74 68 65 |,"doc":"A weathe|
000000d0 72 20 72 65 61 64 69 6e 67 2e 22 7d 00 b0 81 b3 |r reading."}....|
000000e0 c4 0a 0c f6 62 fa c9 38 fd 7e 52 00 a7 0a cc 01 |....b..8.~R.....|
000000f0 18 30 31 31 39 39 30 2d 39 39 39 39 39 ff a3 90 |.011990-99999...|
First four bytes, 4f 62 6a 01, are the header
The next thing is a long describing the size of the first block of the "metadata" map. long are encoded using variable-length zig-zag coding, so here 04 means 2 which coherent with the output of getmeta. (remember to read the Avro specification to know how various data type are encoded)
Just after you will find the first key of the map. A key is a string and a string is prefixed by its length in bytes. Here 0x14 means 10 bytes which is the length of "avro.codec" when encoded in UTF-8.
You can then skip the next 10 bytes and go to the next element. Etc. You can advance until you spot the avro.schema part.
Just after this string is the length of the map value (which is a string since it is our schema). That is what you want to modify. We are renaming station into station-id so you want to add 3 to the current length, so f2 02 should now be f8 02 (remember variable length zig zag coding ?).
You can now update the schema string to add "-id"
Enjoy
java -jar /home/cmathieu/Sources/avro-trunk/lang/java/tools/target/avro-tools-1.8.0-SNAPSHOT.jar tojson weather.avro
{"station-id":"011990-99999","time":-619524000000,"temp":0}
{"station-id":"011990-99999","time":-619506000000,"temp":22}
{"station-id":"011990-99999","time":-619484400000,"temp":-11}
{"station-id":"012650-99999","time":-655531200000,"temp":111}
{"station-id":"012650-99999","time":-655509600000,"temp":78}
But as I said, you most likely don't want to do that.

Send binary data with cfsocketsenddata

I try to send a UDP package for Wake on Lan. The first part of the package needs to be 6*FF in hexadecimal code followed by 16 * mac address in hex. How can I send the NSString in hex value? As now it sends the value 255 as 32 35 35 instead of FF.
I have the following code:
NSMutableString *messageData= [NSMutableString new];
[messageData appendString: #"255255255255255255"];
for (int i = 0; i <= 16; i++) {
[messageData appendString:(#"%# ",self.macAddress)];
}
char const *messageDataChar = [messageData UTF8String];
CFDataRef Data = CFDataCreate(NULL, (const UInt8*)messageDataChar, strlen(messageDataChar));
NSData *destAddrData = [NSData dataWithBytes:&addr length:sizeof(addr)];
CFSocketError errorDetails = CFSocketSendData(socket, (__bridge CFDataRef) destAddrData, Data, 0);
Todo: inplement a broadcast instead of sending to an ip address.
Wireshark shows the following package data being sent when trying with mac address aa:bb:cc:dd:ee:ff :
0000 32 35 35 32 35 35 32 35 35 32 35 35 32 35 35 32 2552552552552552
0010 35 35 61 61 62 62 63 63 64 64 65 65 66 66 61 61 55aabbccddeeffaa
0020 62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63 bbccddeeffaabbcc
0030 64 64 65 65 66 66 61 61 62 62 63 63 64 64 65 65 ddeeffaabbccddee
0040 66 66 61 61 62 62 63 63 64 64 65 65 66 66 61 61 ffaabbccddeeffaa
0050 62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63 bbccddeeffaabbcc
0060 64 64 65 65 66 66 61 61 62 62 63 63 64 64 65 65 ddeeffaabbccddee
0070 66 66 61 61 62 62 63 63 64 64 65 65 66 66 61 61 ffaabbccddeeffaa
0080 62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63 bbccddeeffaabbcc
0090 64 64 65 65 66 66 61 61 62 62 63 63 64 64 65 65 ddeeffaabbccddee
00a0 66 66 61 61 62 62 63 63 64 64 65 65 66 66 61 61 ffaabbccddeeffaa
00b0 62 62 63 63 64 64 65 65 66 66 61 61 62 62 63 63 bbccddeeffaabbcc
What I need is the following:
0000 ff ff ff ff ff ff aa bb cc dd ee ff aa bb cc dd ................
0010 ee ff aa bb cc dd ee ff aa bb cc dd ee ff aa bb ................
I can't really find how to work with hex values in objective C.

Windows 8 MessageWebSocket http request garbage

I'm developing a Windows 8 app that communicates with a node.js server using node.js/socket.io, and have ran into a pile of issues with connecting. I decided to run a tcp sniffer application (microsoft network monitor 3.4), and noticed that before sending the http request, there is a bunch of garbage in my string:
C8 D7 19 87 09 1C C8 60 00 13 8C FA 08 00 45 00 00 C3 37 78 40 00 80 06 00 00 C0 A8 01 71 17 17 5C 67 C2 4F 01 BB 06 1A 36 71 A2 8B 48 C7 50 18 04 00 36 4D 00 00 47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A 53 65 63 2D 57 65 62 53 6F 63 6B 65 74 2D 4B 65 79 3A 20 76 46 46 30 4F 4C 2F 55 63 53 49 6E 6F 70 46 67 52 69 6F 52 73 77 3D 3D 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 55 70 67 72 61 64 65 0D 0A 55 70 67 72 61 64 65 3A 20 57 65 62 73 6F 63 6B 65 74 0D 0A 53 65 63 2D 57 65 62 53 6F 63 6B 65 74 2D 56 65 72 73 69 6F 6E 3A 20 31 33 0D 0A 48 6F 73 74 3A 20 32 33 2E 32 33 2E 39 32 2E 31 30 33 3A 34 34 33 0D 0A 0D 0A
È×.‡..È`..Œú..E..Ã7x#.€...À¨.q..\gÂO.»..6q¢‹HÇP...6M..GET / HTTP/1.1..Sec-WebSocket-Key: vFF0OL/UcSInopFgRioRsw==..Connection: Upgrade..Upgrade: Websocket..Sec-WebSocket-Version: 13..Host: 192.168.1.1:443.... (the dots are \r\n in most cases)
Although I am using port 443, this is not a secured websocket - I am forced to use 443 because some smart phones only allow websockets to create socket connections on that port.
In C++, I am creating the websocket like so:
void Websocket::Connect(Platform::String ^host)
{
if ( this->socket != nullptr ) return;
try
{
Uri^ address = ref new Uri(host);
readBuffer = ref new Buffer(1000);
this->socket = ref new MessageWebSocket();
this->socket->Control->MessageType = SocketMessageType::Utf8;
this->socket->Control->MaxMessageSize = 512;
this->socket->Closed += ref new TypedEventHandler<IWebSocket^, WebSocketClosedEventArgs^>( this, &Websocket::ServerClosed );
this->socket->MessageReceived += ref new TypedEventHandler<MessageWebSocket^, MessageWebSocketMessageReceivedEventArgs^>( this, &Websocket::MessageRecv );
create_task(this->socket->ConnectAsync(address)).then([this](task<void> previousTask)
{
try
{
concurrency::task_status status = previousTask.wait();
switch( status ) {
case concurrency::task_status::completed:
this->connected = true;
break;
default:
socketErrorString = ref new Platform::String( L"Connection was cancelled" );
}
}
catch(Exception^ exception)
{
this->connected = false;
socketErrorString = ref new Platform::String( exception->Message->Data() );
this->socket = nullptr;
} catch( ... ) {
this->connected = false;
socketErrorString = ref new Platform::String( L"Unknown exception caught (inside connect)" );
this->socket = nullptr;
}
});
} catch( Exception ^exc ) {
this->connected = false;
socketErrorString = exc->Message; //ref new Platform::String( L"Unknown exception caught (outside connect)" );
this->socket = nullptr;
}
}
I can't see any sort of issue in the code, so I was hoping a few other sets of eyes may be able to. Thanks.
What you've pasted appears to be an Ethernet frame, but with 8 bytes stripped (7-byte preamble and 1-byte Start Frame Delimiter) because the network interface doesn't receive it.
The first fourteen bytes are the Ethernet header: 6 bytes for the destination MAC address, 6 bytes for the source MAC address, and 2 bytes for the EtherType, with 08 00 denoting that it is IPv4 packet.
The Ethernet payload follows the Ethernet header and, in this case, is an IP datagram, so it starts with an IP header at offset 14 with byte 45 denoting an IPv4 header with a header length of 20 bytes. At offset 23 you'll find the IP protocol of 06 denoting TCP. At offset 26 you'll find the source IP address (C0 A8 01 71, i.e. 192.168.1.113). At offset 30 you'll find the destination IP address.
The IP payload follows the IP header, and, in this case, it is a TCP segment starting with a TCP header at offset 34 with bytes C2 4F denoting a source port of 49743 and bytes 01 BB denoting a destination port of 443. At offset 46 you have 50 denoting a TCP header length of 20 bytes.
The TCP payload follows the TCP header, and, in this case, is HTTP starting at offset 54 with bytes 47 45 54 ... being "GET...".
This request packet appears to be wellformed. I believe your problem lies elsewhere.

Cannot view xps file inside iFrame. If iFrame is expanded than file shows up

This only happens on windows XP and works fine on Windows 7.
In our application we display many different file types. One them is xps. If iFrame window is big enough it displays fine but I make it smaller than I get the followin error:
Event Type: Error
Event Source: Application Error
Event Category: None
Event ID: 1000
Date: 10/13/2010
Time: 10:47:13 AM
User: N/A
Computer: CS-XP-IE8
Description:
Faulting application xpsviewer.exe, version 3.0.6920.1427, faulting module kernel32.dll, version 5.1.2600.5781, fault address 0x00012afb.
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Data:
0000: 41 70 70 6c 69 63 61 74 Applicat
0008: 69 6f 6e 20 46 61 69 6c ion Fail
0010: 75 72 65 20 20 78 70 73 ure xps
0018: 76 69 65 77 65 72 2e 65 viewer.e
0020: 78 65 20 33 2e 30 2e 36 xe 3.0.6
0028: 39 32 30 2e 31 34 32 37 920.1427
0030: 20 69 6e 20 6b 65 72 6e in kern
0038: 65 6c 33 32 2e 64 6c 6c el32.dll
0040: 20 35 2e 31 2e 32 36 30 5.1.260
0048: 30 2e 35 37 38 31 20 61 0.5781 a
0050: 74 20 6f 66 66 73 65 74 t offset
0058: 20 30 30 30 31 32 61 66 00012af
0060: 62 0d 0a b..
Any help would be appreciated
I needed to update to .NET 3.5 SP2 or download hotfix for xpsviewer