[英]SignalR HttpContext.Current null in IIS 8.0
我修改了SignalR網站文檔中的Broadcast Sample,而不是隨機值,我讀了隨機的xml文件。 我正在使用HttpContext.Current.Server.MapPath
方法來訪問文件並避免硬編碼物理路徑。 這在Windows 7 IIS 7.5和Visual Studio 2013中運行良好,但在Windows 8.1和Windows Server 2012中,我發現HttpContext.Current
為null
。 在詢問之前我搜索了其他問題,但沒有發現任何類似於此處發生的事情。
這是全班代碼:
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace SignalRDisplayXML
{
public struct ReturnDataScheme
{
public List<VsDisplaySlotBean> slotsdata;
public string filename;
}
public class XmlTicker
{
private readonly static Lazy<XmlTicker> _instance =
new Lazy<XmlTicker>(() => new XmlTicker(GlobalHost.ConnectionManager.GetHubContext<DisplayXMLHub>().Clients, HttpContext.Current.Server.MapPath("~/Data/")));
private DAO _dao = new DAO();
private ReturnDataScheme _server_data = new ReturnDataScheme();
private string _directoryPath = string.Empty;
private readonly object _processRandomXMLLock = new object();
private volatile bool _updatingRandomXML = false;
private readonly Timer _timer;
private XmlTicker(IHubConnectionContext clients, string path)
{
Clients = clients;
_directoryPath = path;
_server_data.filename = GetRandomFileName();
_server_data.slotsdata = _dao.GetVesselAll(_server_data.filename);
_timer = new Timer(ProcessRandomXML, null, 10000, 10000);
}
public static XmlTicker Instance
{
get
{
return _instance.Value;
}
}
private IHubConnectionContext Clients
{
get;
set;
}
public ReturnDataScheme GetCurrentData()
{
return _server_data;
}
private void ProcessRandomXML(object state)
{
lock (_processRandomXMLLock)
{
if (!_updatingRandomXML)
{
_updatingRandomXML = true;
_server_data.filename = GetRandomFileName();
_server_data.slotsdata = _dao.GetVesselAll(_server_data.filename);
Clients.All.DataPush(_server_data);
_updatingRandomXML = false;
}
}
}
private string GetRandomFileName()
{
Random randomizer = new Random(DateTime.Now.Millisecond);
return _directoryPath + "DisplaySlotFDMF00" + randomizer.Next(1, 9).ToString() + ".xml";
}
}
}
謝謝。
您可以使用HostingEnvironment.MapPath而不是HttpContext.MapPath。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.