How does MSE determine where to route operation with different versions ...

Topics: Usage Scenarios, Technical Questions
Jan 12, 2009 at 1:39 PM
For Service Operation having multiple versions and different message contracts, MSE will implicitly route request to corresponding version. If the message contracts are the same, MSE would route request to the most current version unless a version is explicitly requested. This is done by concatenating the version number on the end of the operation name.

The above is documented in the associated document for the IntroductionLab. How does MSE determines this, i.e., what's happening behind the scene? Are the Operations hosted in a MSE Endpoint persisted perhaps in a database table (in the MSE6DB database) or somewhere else, if so, can you please share what are these database objects and/or media?

Thanks.
Developer
Jan 14, 2009 at 4:27 PM
The source code for the catalog service and database procedures are available for download if you want to dive into how the information is stored.  When linking an operation to an endpoint you decide which version of the operation you want to be active and/or published.  The MSE runtime uses this active/published information when determining which version the message should be routed to.  This logic is handled by the Broker with support from the Catalog Service.  While the Broker source code isn't available, you can see the core logic of matching a message to an operation version by looking at a few methods on the catalog service.

Look at the operation 'ValidateOperationVersionRequest' in the Catalog service if you want to know where the main work of comparing a specific incomming message to an operation version is performed (we are essentially doing a schema validation).  Obtaining the list of operation versions to compare the message to is first retrieved from the catalog operation 'GetOperationVersionsForEndpointAndAction', if none of those match (i.e. the incomming message doesn't have an action) then the list returned from GetOperationVersionsForEndpointAndFirstBodyElement is used.

Resolving to an operation version can be a relatively expensive task so the MSE Runtime caches the result of the resolution process if it can.  Having more than one version of an operation active at the same endpoint limits the amount of caching that is currently performed.

Hope that helps.
Jan 15, 2009 at 7:33 PM
I'm just trying to quickly pass a version number on an operation using the MSE Service Tester using the AdvanceCalculator service, this is to test the versioning functionality of MSE on operations with same contract. How can this be implemented, the doc says this can be done by concatenating the version number on the end of the operation name, e.g., AddIntegers:1.0.0.0.  I'm trying to do that in the Input Message tab of the MSE Service Tester, e.g., <AddIntegers:1.0.0.0/> but obviously, this is not a valid XML.
Developer
Jan 19, 2009 at 2:33 PM
"AddIntegers:1.0.0.0" is what should go in the Action field of the service tester.  The input message should be the regular message for the calculator service <AddIntegers/>