"Portset is invalid" - All operation types which inherit from another operation type on the same portset must come before the base type in the portset definition.

Example

		    [ServicePort]
		    public class [MyServiceOperations] : [PortSet<]
		        [dssp.DsspDefaultLookup,] 
		        [dssp.DsspDefaultDrop,] 
		        Get, 
		        Subscribe,             <-- *** ERROR *** Subscribe is before [ReliableSubscribe]
		        [ReliableSubscribe,]    
		        [MyOtherUpdate>]    
		    {
		    }
	

		 *** Error: [Robotics.MyService.MyServiceOperations] Portset is invalid. 
		     Subscribe must be preceeded by [Robotics.MyService.ReliableSubscribe.]
	

In this case, since ReliableSubscribe inherits from Subscribe, the order in the portset would prevent a Reliable Subscribe handler from ever being run, since the Subscribe comes first and catches all messages for both Subscribe and ReliableSubscribe. This was a prevalent problem in earlier code, but difficult to detect since the message is actually handled. Simply switch ReliableSubscribe and Subscribe in the portset definition of MyServiceOperations.

		    [ServicePort]
		    public class [MyServiceOperations] : [PortSet<]
		        [dssp.DsspDefaultLookup,] 
		        [dssp.DsspDefaultDrop,] 
		        Get, 
		        [ReliableSubscribe,]     // IMPORTANT: Because [ReliableSubscribe] inherits from Subscribe, 
		        Subscribe,             // it needs to be declared on the [PortSet] before Subscribe.
		        [MyOtherUpdate>]    
		    {
		    }
	

Related Links

* MigratingToV15
* MSRoboticsStudio
Microsoft Communities