dotnet/aspnetcore

IInvocationBinder throws or returns empty array inconsistently

Open

#63,084 建立於 2025年8月3日

在 GitHub 查看
 (3 留言) (0 反應) (0 負責人)C# (10,653 fork)batch import
area-signalrhelp wanted

倉庫指標

Star
 (37,933 star)
PR 合併指標
 (平均合併 16天 9小時) (30 天內合併 258 個 PR)

描述

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

貢獻者指南