簡介:
實現數據實時刷新:SignalR
后台服務:.NET/WebAPI
為了減輕web的壓力,將接口中接收數據的方法寫到SignalR的Hub中
在此放一小段代碼給自己加深下印象,博主有點健忘......
/// <summary>
/// 向客戶端發送照片上傳的結果
/// </summary>
/// <param name="imageInfo">JSON字符串</param>
public void HhtUpCarInfo(string imageInfo)
{
//var聲明一個變量,接收Base64StringToFile() 的返回值
var uploadImageResult = Base64StringToFile(imageInfo);
//然后通過Clients.All.Base64StringToFile(uploadImageResult)將結果返回給移動端
Clients.All.Base64StringToFile(uploadImageResult);
}
/// <summary>
/// 上傳照片
/// </summary>
/// <param name="imageInfo"></param>
/// <returns>圖片的相對路徑</returns>
public string Base64StringToFile(string imageInfo)
{
//通過多次實驗發現SignalR中只能接收安卓上傳的字符串格式,所以在這里調用了博主自己的類庫中一個將JSON轉換成對象的方法來接收參數
CarInfoImageDto carInfoImage = JsonHelper.DeserializeByNewton<CarInfoImageDto>(imageInfo);
//調用博主自己的類庫中將Base64String轉換成圖片的方法
return DecodeBase64.Base64StringToFile(carInfoImage.Base64String, carInfoImage.FileType);
}
/// <summary>
/// 將JSON字符串轉換為C#對象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T DeserializeByNewton<T>(string json)
{
return JsonConvert.DeserializeObject<T>(json);
}
/// <summary>
/// 上傳圖片信息
/// </summary>
/// <param name="base64String">Base64字符串</param>
/// <param name="fileType">文件類型</param>
/// <returns>如果保存成功,會返回文件的相對路徑;否則返回空值</returns>
public static string Base64StringToFile(string base64String, string fileType)
{
string virtualPath = string.Format("/File/{0:yyyyMMddhhmmss}.{1}", DateTime.Now, fileType);
string physicalPath = HttpContext.Current.Server.MapPath(virtualPath);
if (!string.IsNullOrEmpty(base64String) && !File.Exists(physicalPath))
{
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
memoryStream.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(memoryStream);
image.Save(physicalPath);
return virtualPath;
}
return "上傳失敗";
}
在上面的代碼示例中可以深入了解SignalR與客戶端數據的傳輸特點以及交互的實現。
關於SignalR實現頁面實時刷新的的功能可以去看一下博主SignalR分類下的文章,你會對SignalR有一個更深刻的認識。