dotnet / dotnet/aspnetcore

IInvocationBinder throws or returns empty array inconsistently

Open
#63,084 3 comments 0 reactions 0 assignees View on GitHub
area-signalr help wanted
Dominant language
C#
Stars
38.4k
Forks
10.9k
Avg merge
2d 6h
Merged PRs (30d)
290

Description

In writing my own `IHubProtocol` implementation, I found that when a method is invoked, there is no good way to determine whether a method exists with the `target` name to invoke. As a result, I get unhelpful exceptions thrown.

In particular, while deserializing the invocation request I need the parameter types. I call `IInvocationBinder.GetParameterTypes` passing in the name of the target method that I have already deserialized. When the method does not exist, it simply returns an empty array, causing my `BindArguments` method to throw because the number of arguments and the number of parameters mismatch. But that's a red herring. The real issue is that the method itself does not exist at all.

I notice that `IInvocationBinder.GetReturnType` _does_ throw when the target method does not exist.

Why the two diverging and undocumented policies for these two methods?

What is the best way to handle this?

https://github.com/dotnet/aspnetcore/blob/406950442014149931322f97c42e999ce03fdb71/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs#L2395-L2423

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.