У меня есть приложение SignalR в двух частях. У меня есть базовые сообщения, идущие туда и обратно между MVC-приложением (SignalR Server) и службой Windows (SignalR Client). Служба Windows находится на внутренней машине, на которой есть база данных AdventureWork2012. Управление желает, чтобы клиент службы Windows - SignalR запросил базу данных и отправил обратно DataSet через SignalR. Может ли SignalR передавать данные? Я получаю исключение «Недопустимый URI: строка Uri слишком длинная». в журнале событий, когда я вызываю метод сервера.SignalR Могу ли я передать DataSet
Вот MVC сервер-концентратор:
public class AlphaHub : Hub
{
public void Hello(string message)
{
// We got the string from the Windows Service
// using SignalR. Now need to send to the clients
Clients.All.addNewMessageToPage(message);
// Call Windows Service
string message1 = System.Environment.MachineName;
Clients.All.Notify(message1);
}
public void Register(string registrationID,string connectionID)
{
// We got the string from the Windows Service
// using SignalR. Now need to send to the clients
System.Web.HttpContext.Current.Application["registrationID"] = registrationID + "|" + connectionID;
}
public void RecieveDataSet(DataSet ds)
{
Clients.All.addNewMessageToPage("Data Set recieved");
}
Здесь Windows Service Code, который генерирует исключение на линии:
await alphaProxy.Invoke("RecieveDataSet", employees);
Код является:
protected override async void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart");
try
{
var hubConnection = new HubConnection("http://www.someurl.com/signalr", useDefaultUrl: false);
IHubProxy alphaProxy = hubConnection.CreateHubProxy("AlphaHub");
await hubConnection.Start();
string cid = hubConnection.ConnectionId.ToString();
eventLog1.WriteEntry("ConnectionID: " + cid);
// Invoke method on hub
await alphaProxy.Invoke("Hello", "Message from Service - ConnectionID: " + cid + " - " + System.Environment.MachineName.ToString() + " " + DateTime.Now.ToString());
await
alphaProxy.Invoke("Register", "81577f58-0e05-43f4-b322-fbf0d9d1e79e",
hubConnection.ConnectionId.ToString());
alphaProxy.On("addNewMessageToPage",() => eventLog1.WriteEntry("Notified!"));
DataSet employees = new DataSet();
string connString = "...";
SqlConnection conn = new SqlConnection(connString);
string queryString = "SELECT * FROM [HumanResources].[Employee]";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, conn);
adapter.Fill(employees, "HumanResources.Employee");
await alphaProxy.Invoke("RecieveDataSet", employees);
}
catch (Exception ex)
{
eventLog1.WriteEntry(ex.Message);
}
}
Возможно ли передать DataSet? Если нет, мне нужно сериализовать/десериализовать? Если да, можете ли вы показать код для этого?
Вы можете передать объект JSON к вашему JavaScript да. – Gjohn
Здесь я не имею дело с JavaScript. Я пытаюсь вызвать RecieveDataSet в классе Hub на сервере. – user2471435
Пока вы можете создавать JSON, вы можете отправить его, я верю. –