|
Tuesday, July 18, 2006
Runspace Remoting
Scott Hanselman is one of the early users and supporters of my PowerShell Remoting. He did an interesting post about Runspace Remoting. Briefly, he used export-clixml to serialize objects at server and used import-clixml to reconstruct PSObject at client. I have tried similar mechanism and failed. Actually Karl Prosser and I have been talking about using export-clixml/import-clixml a while ago . Great job, Scott!
Despite of my failure on serialization/de-serialization of PSObject, there is other reasons made me choose user interface remoting:
PS: To Monad Team, a public helper API to serialize PSObject to string will be really helpful.
Have Fun
Despite of my failure on serialization/de-serialization of PSObject, there is other reasons made me choose user interface remoting:
- Monad was designed to capable of user interface remoting. Monad engine will manage to display and format (out-default) remote objects. Monad engine can even truncate objects collection for you if there are too many objects in the pipline.
- Not all tasks require local objects exactly matching remote objects. For most remote scripting tasks, user interface remoting is good enough. User interface remoting deliver similar user experience as local shell. SSHD already proved itself successful story by similar mechanism.
- User can manipulate "Real" remote objects via user interface remoting (No "Heisenberg Uncertainly Principle of PowerShell").
- Serialization/de-serialization method has its own limitations.
- It can use a lot of resources and band-width. Consider the situation when multiple runspace ouput huge collection of objects at the same time, even with proper threading management server could still be overloaded.
- What if you just need one simple property of an object with hundreds or thounds of properties, you would have to serialize all public properties of that object and transfer it to client.
- It can loose some property associate with original objects.
- It can use a lot of resources and band-width. Consider the situation when multiple runspace ouput huge collection of objects at the same time, even with proper threading management server could still be overloaded.
- "Clustering" multiple servers is possible with user interface remoting. I am trying to "fork" single client input to multiple servers by simply add current client component to server component. (There are still some problems with this model)
PS: To Monad Team, a public helper API to serialize PSObject to string will be really helpful.
Have Fun
Tags: msh monad PowerShell
Comments:
<< Home
Cool! We should get this working and release it. Email me and I'll get you the code.
One interesting note: some of the exceptions like "ParameterException" if you call a script wrong on the remote machine don't serialize (not marked Serializable!) so you get a serialization error rather than a PSObject on the caller side.
We should tell Jeffrey to mark everything serializable...you never know!
One interesting note: some of the exceptions like "ParameterException" if you call a script wrong on the remote machine don't serialize (not marked Serializable!) so you get a serialization error rather than a PSObject on the caller side.
We should tell Jeffrey to mark everything serializable...you never know!
<< Home
Post a Comment