当使用Xamarin Android应用程序作为SignalR客户端时,我遇到了这种奇怪的行为。具有:
public GameClient()
{
_connection = new HubConnection("url");
_proxy = _connection.CreateHubProxy("GameHub");
_proxy.On("SendMove", (string playerID, string fromID, string toID, int actions, int lastUpdate) =>
{
if (OnMoved != null)
OnMoved(playerID, actions, fromID, toID, lastUpdate);
});
导致System.MissingMethodException: Method not found: 'Microsoft.AspNet.SignalR.Client.HubProxyExtensions.On'.
。但是当我在方法中间只删除了一个参数时:
_proxy.On("SendMove", (string playerID, int actions, string destinationID, int lastUpdate) =>
{
if (OnMoved != null)
OnMoved(playerID, actions, destinationID, lastUpdate);
});
然后一切正常。有人会认为错误是由参数的数量引起的 - 也许,SignalR有一些限制。但是,我用这种方法得到了同样的错误:
_proxy.On("SendGameJoined", (object xDoc) =>
{
if (OnGameJoined != null)
OnGameJoined(this, xDoc);
});
只是一个参数,并再次出现相同的错误。现在,解决方案 - 或者更确切地说是解决方法 - 再次非常简单。将对象更改为字符串会立即起作用。
_proxy.On("SendGameJoined", (string xDoc) =>
{
if (OnGameJoined != null)
OnGameJoined(this, xDoc);
});
现在,SignalR文档说,任何类型的参数都可以有任意数量 - 甚至是自定义参数。我只使用常见的C#类型,但我有这种奇怪的行为。难道我做错了什么?或者它是SignalR或Xamarin中的错误?