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