4.3 Dispatching a Call on the Server Using Deactivate
This example assumes that the client already has an interface pointer to an instance of an object that implements IRemoteDispatch. The following diagram helps to illustrate this example. The scenario is around a remote server object which has a method named Method. This method takes two string parameters. The first parameter a is an in only parameter, the second parameter b is the out only parameter.
-
Method(string a, out string b);
The call graph for this on the client side is given below.
Figure 5: Call sequence for dispatching a call with Deactivate from client to server
Figure 6: Call graph on the client side for the given scenario
The client accepts a call for "Method" taking two parameters a and b.
The client transforms the method call into a byte representation as specified in [MS-NRTP] section 3.1.5.1.1.
The client then takes the byte representation and passes it as a BSTR in the s parameter over RemoteDispatchAutoDone.
The representative BSTR for the current example would look like the following.
00000000 00000000 00000100 00000000 ................ 00121500 06120000 6874654d 5112646f ........Method.Q 74736554 706d6f43 6574202c 202c7473 TestComp, test, 73726556 3d6e6f69 2e302e30 2c302e30 Version=0.0.0.0, 6c754320 65727574 75656e3d 6c617274 Culture=neutral 7550202c 63696c62 5479654b 6e656b6f , PublicKeyToken 3030313d 66663066 65643064 34336662 =100f0ffd0debf34 00000233 48051200 6f6c6c65 00000b11 3......Hello.... 00650073 00000073 78adbf68 00000642 s.e.s...h..xB... 61df552e 800000d1 0000017e 00000006 .U.a....~....... 00000000 00001771 00000002 76726553 ....q.......Serv 20656369 6b636150 202c3120 36322e76 ice Pack 1, v.26 00000037 00000002 0000004c 00000009 7.......L....... 00000002 00000059 00000013 00000004 ....Y........... 0000005d 00000015 00000002 0000006a ]...........j... 0000001f 00000004 0000006e 00000021 ........n...!...
The server receives the call and transforms the incoming BSTR in parameter s into a method call. The server then dispatches the method call on the object.
Figure 7: Call graph on the server side for the given scenario.
"Method" completes. On completion, it populates "World" into the out parameter b.
Figure 8: Return call graph on the server side for the given scenario.
The server now takes the return call and packages it again into a byte representation as specified in [MS-NRTP] section 3.1.5.1.1.
RemoteDispatchAutoDone implementation takes the binary representation and makes it a payload for BSTR out parameter pRetVal.
The representative BSTR for the current example would look like the following.
00000000 00000000 00000100 00000000 ................ 04121600 00020000 12110000 726f5705 .............Wor 000b646c 00000000 0020f490 00000000 ld........ ..... 61df71bf 800000d1 0000003a 00000000 .q.a....:....... 00000000 00000000 ff6c5db0 .........]l.
RemoteDispatchAutoDone implementation deactivates the server object by releasing all references to it such that the particular instance of the server is destroyed.
As the client call returns the data received on the client side in the pRetVal BSTR parameter is converted back to a return call parameters and the control is transferred back to the caller.
Figure 9: Return call graph on the client side for the given scenario.