When there is an interface as an argument for a grain method the error message for a missing serializer is difficult to troubleshoot.
When debugging you can see an exception when it tries to route the call that it doesn't understand how to serialize that type, but the end user experience is that the grain timed out after the grain timeout length so there's not an easy actionable step to determining the issue. At very least the error handling in this scenario should be improved, but ideally Orleans should search for implementations of interfaces on grain methods and generate serializers for them without needing to be add a [KnownType] or [GenerateSerializer] .
When there is an interface as an argument for a grain method the error message for a missing serializer is difficult to troubleshoot.
When debugging you can see an exception when it tries to route the call that it doesn't understand how to serialize that type, but the end user experience is that the grain timed out after the grain timeout length so there's not an easy actionable step to determining the issue. At very least the error handling in this scenario should be improved, but ideally Orleans should search for implementations of interfaces on grain methods and generate serializers for them without needing to be add a [KnownType] or [GenerateSerializer] .