2014-02-13 2 views
4

Я создаю класс концентратора для своего сервера SignalR и хотел использовать общий метод, который избавит меня от множества строк кода. Но SignalR дает мне ошибки, когда я пытаюсь вызвать код сервера ниже с клиента Xamarin.iOS, который также находится на C#.Использование общих методов в концентраторе SignalR

код сервера

public List<T> SendDataToClient<T>() where T : BusinessEntityBase 
{ 
    return SomeDBManager.GetItems<T>(); 
} 

Client Code

var list = await hubProxy.Invoke<List<Article>>("SendDataToClient"); 

Могу ли я сделать что-то здесь не так, или это просто невозможно использовать общие методы в SignalR концентраторы?

ответ

3

Вы не можете использовать общие методы для клиентов SignalR. Вы заметите, что если вы запустите signalr ghp /path:myassembly.dll против библиотеки DLL, содержащей ступицу с общим методом SendDataToClient, вы получите следующее сообщение об ошибке:

System.ArgumentException: Method System.Collections.Generic.List`1[T] SendDataToClient[T]() is a generic method definition 

Это легче увидеть эту ошибку при использовании команды signalr ghp для генерации JavaScript-хаб-прокси-файл, но это та же ошибка, которая возникает на сервере при попытке вызвать SendDataToClient.

+0

Благодарим вас за оформление. Итак, теперь я должен спросить, что бы вы порекомендовали вместо этого? Написание функции для концентратора для каждого типа данных? – timu

+1

Это самый простой подход. – halter73