Friday, 15 March 2013

c# - System.IO.Exception: Pipe is broken on client side -



c# - System.IO.Exception: Pipe is broken on client side -

i have 2 windows applications , using named pipes send , receive lists of info between them. serialization/deserialization mechanism using binaryformatter class.

server:

static void startserver() { var server = new namedpipeserverstream("pipesenroll", pipedirection.inout); while (true) { streamreader reader = new streamreader(server); streamwriter author = new streamwriter(server); string terminaltemplate; string matchertemplate; int mathversionnumber = 9; int numberfingers; binaryformatter formatterdeserialize = new binaryformatter(); list<byte[]> retrievedlist = (list<byte[]>)formatterdeserialize.deserialize(reader.basestream); bool isok = enroll.enrollwithoutwcf(retrievedlist, mathversionnumber, out terminaltemplate, out matchertemplate, out numberfingers); list<string> sendlist = new list<string>(); sendlist.add(isok.tostring()); sendlist.add(terminaltemplate); sendlist.add(matchertemplate); sendlist.add(numberfingers.tostring()); binaryformatter formatterserialize = new binaryformatter(); formatterserialize.serialize(writer.basestream, sendlist); server.disconnect(); }

client:

using (var client = new namedpipeclientstream(".", "pipesenroll", pipedirection.inout)) { client.connect(); streamreader reader = new streamreader(client); streamwriter author = new streamwriter(client); binaryformatter formatterserialize = new binaryformatter(); formatterserialize.serialize(writer.basestream, images); // writer.write(stream); // writer.flush(); binaryformatter formatterdeserialize = new binaryformatter(); list<string> retrievedlist = (list<string>)formatterdeserialize.deserialize(reader.basestream); bool isok = convert.toboolean(retrievedlist[0]); string terminaltemplate = retrievedlist[1]; string matchertemplate = retrievedlist[2]; int numberfingers = convert.toint32(retrievedlist[3]);

}

but exception "system.io.exception: pipe broken" appears on client side when executing formatterserialize.serialize(writer.basestream, images); in debug mode.

does have suggestion on how avoid issue?

streamwriter belongs namedpipeclientstream. if namedpipeclientstream disposed part of process disposing streamwriter well. if reason streamwriter closed/disposed in other part of code result pipe broken.

1) check formatterserialize.serialize not closing streamwriter.

2) create sure flush streamwriter before exiting using of namedpipeclientstream.

c# named-pipes inter-process-communicat broken-pipe

No comments:

Post a Comment