Xin lưu ý rằng tôi đang tham chiếu rõ ràng SignalR 2.0 ở đây ... Tôi đã nhìn thấy một số phương pháp (khó chịu) cho điều này với SignalR 1.1/1.2 ... nhưng không cho 2.0.SignalR 2.0 thay đổi Json Serializer để hỗ trợ các kiểu đối tượng có nguồn gốc
Có ai có bất kỳ thành công nào với việc thay đổi bộ nối tiếp json mặc định SignalR 2.0 để cho phép gửi các kiểu có nguồn gốc không? Dựa trên những gì tôi đã đọc về SignalR 2.0, điều này có thể xảy ra, tuy nhiên, tôi không có may mắn và không tìm thấy một ví dụ đầy đủ ở bất cứ đâu.
Đây là cách tôi bắt đầu… bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.
My Startup.cs
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// this should allow the json serializer to maintain the object structures
var serializer = new JsonSerializer()
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
};
// register it so that signalr can pick it up
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer);
app.MapSignalR();
}
}
}
Phương pháp trên
public void AddStock(Stock stock)
{
string stockType = stock.GetType().ToString();
Console.WriteLine("The type of stock we got was: " + stockType);
}
ứng dụng giao diện điều khiển kiểm tra Hub My (điều này công bố vào trung tâm)
myDataHub.Invoke("AddStock", new NyseStock()
{
Company = "Microsoft",
NyseSymbol = "MSFT"
});
myDataHub.Invoke("AddStock", new DaxStock()
{
Company = "Microsoft",
DaxSymbol = "DMSFT"
});
Chỉ cần cho các biện pháp Cổ tốt. cs
namespace Messages
{
public class Stock
{
public string Company
{
get;
set;
}
public decimal Price
{
get;
set;
}
}
public class NyseStock : Stock
{
public string NyseSymbol
{
get;
set;
}
}
public class DaxStock : Stock
{
public string DaxSymbol
{
get;
set;
}
}
}
Độ nghiêng đầu tiên của tôi là tôi đã bỏ qua việc thiết lập bộ nối tiếp trong máy khách. Vì vậy, tôi nói thêm như sau sau khi tạo kết nối nhưng trước khi việc tạo ra các proxy hub:.
myConnection = new HubConnection("http://localhost:64041/");
// Update the serializer to use our custom one
myConnection.JsonSerializer = new JsonSerializer()
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
};
//Make proxy to hub based on hub name on server
myDataHub = myConnection.CreateHubProxy("DataHub");
Tuy nhiên điều này chỉ dẫn đến một InvalidOperationException (dữ liệu không thể được gửi bởi vì kết nối ở trạng thái ngắt kết nối Gọi bắt đầu trước khi gửi bất kỳ dữ liệu nào.) trong lời gọi myDataHub.Invoke (..).
Bạn đã bao giờ tìm ra điều này chưa? Tôi đang gặp vấn đề tương tự. – chad
Cùng một vấn đề ở đây ... –