Request clarification on Decentralized Software Services communication mechanism

Dec 17, 2012 at 12:14 AM

Dear All,

I see from http://social.msdn.microsoft.com/Forums/en/roboticsdss/thread/3169a539-f536-4b9d-bae7-01212a857660 and also from my own experience of using and debugging DSS services that DSS makes use of cloning for intra node communication and cloning + serialization for inter node communication. I request your help in understanding this mechanism. For intra node communication, I understand that DSS makes use of only cloning because we are transferring objects in the same process space (there is no need for communicating it over the network) and we do not want any unwanted shared memory dependencies. However, during inter node communication, why do we need to clone + serialize? From my understanding of serialization, when you serialize an object, the output you get at the end of serialization is completely independent of the object being serialized and can be used in isolation to construct a new object. Also, during serializing, I do not think we are going to update the original object and we are merely going to read from it. In such a scenario, will serialization alone not suffice? Why do we need to clone before serializing?

Thanks,

Venkat

Dec 17, 2012 at 10:52 AM

Hi Venkat,

Sorry, I fear that I am not able to help you very much regarding DSS questions. Although I did some tests with DSS, I never used it in a production scenario - since this is what we created the appspace for :-)

Your understanding of serialization is correct - the serialized object is definitely completely independent from the original one. I can only assume that they decided to make no exception in this case, to be on the safe side that really no changes are made to the object before serialization, and because the performance cost is marginal, since the cloning is done with generated code.

Best Regards
Thomas

Jan 4, 2013 at 3:42 AM

Hi Thomas,

Thank you once again for your time and reply. I am sorry, I could not reply earlier since I was busy relocating. I will start by wishing you a very happy new year :)

I do agree with you that DSS is very hard to use and that is one of the reasons why we are trying to move to WCF which we think will give us a lot more flexibility. I was working on this project as part of my MS thesis. I have completed my MS thesis and am currently working on a full time job. I am currently working on this lab automation project part time.

Regarding cloning before serialization for safety, I agree with you that it could be one of the potential reasons (although I do not see practically how an object could be modified in the serialization process). However, I am not sure if cloning (or even serialization) done using generated code has a far greater performance compared to doing it without using generated code (and possibly using reflection). I had the same question and posted it in the MSDN form (the post could be found at http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/933f31a6-d69d-48e0-99f4-90e9ff54d09f). From the discussions, I realized that the only way by which this could be found is by doing performance markers.

Thanks,

Venkat