.Net框架,用于管理单独机器上的后台运行流程

我有一个asp.mvc应用程序驻留在服务器上。从这个应用程序,我想启动一个有点长时间运行的进程,将是资源密集型操作。 所以我想要做的是我希望有一些像3这样的用户代理将在3台机器上运行,这个用户代理只会使用各自机器的资源。 就像在Hadoop中一样,我们有主节点和集群,其中任务在单个集群上运行,并且有1个主节点跟踪所有这些集群。 在Azure中,我们有运行任务的虚拟机,如果需要,Azure可以通过启动新实例来自动扩展以加速任务。 所以我想创建这样的基础设施,我可以从mvc应用程序向3个用户代理提交我的任务,我的应用程序将跟踪这些代理,例如哪个代理是免费的,哪个是被占用的,哪个不是这样的。 我希望从每个用户代理接收进度并在我的MVC应用程序上显示。 在.net中是否有任何框架可以管理这些后台运行操作(跟踪,启动,停止等等)或者应该采用什么方法? 更新:我不想为这个长时间运行的操作加载大量服务器,而且我想跟踪这个长时间运行的进程,就像他们正在做的那样,错误等等。 以下是我正在思考的方法,我不知道哪个更有意义: 1)以2-3计算机内部代理的forms安装Windows服务,以利用resp资源并打开与此代理的tcp / ip连接,除非并且直到长时间运行的过程完成。 2)使用hangfire在IIS线程之外运行这个长时间运行的进程,但我想这会将负载放在服务器上。 我想知道上述方法可能存在的问题,以及是否有更好的方法。

垃圾收集如何在对象引用上工作?

我对对象的垃圾收集过程感到困惑。 object A = new object(); object B = A; B.Dispose(); 通过仅在变量B上调用Dispose,创建的对象将不会被垃圾收集,因为对象仍被A引用。 现在,以下代码与上面的代码相同吗? public static image Test1() { Bitmap A = new Bitmap(); return A; } 现在我从其他方法调用这个静态函数。 public void TestB() { Bitmap B = Test1(); B.Dispose(); } 静态函数Test1返回对Bitmap对象的引用。 引用保存在另一个变量B中。通过调用B上的Dispose,B和object之间的连接丢失,但是从Test1传递的引用会发生什么。 它将保持活动状态,直到函数TestB的范围完成? 有没有办法处理从静态函数传递的引用?

超时exception导致SqlDataReader关闭?

我正在尝试从数据库中提取一些二进制数据并将其写入pdf文件。 在大多数情况下,这是在游泳,但偶尔的数据行似乎抛出一个特定的错误 – 超时已过期。 操作完成之前经过的超时时间或服务器没有响应。 请记住,这只发生在少数行上,并且从不随机。 相同的行总是抛出exception。 我不确定为什么会抛出exception,但我可以跳过导致问题并继续前进的行。 然而,我的问题是,当我捕获exception然后尝试移动到下一行时,我遇到另一个exception – InvalidOperationException – 读取器关闭时无效尝试调用Read。 这是否意味着读者一旦遇到exception就会自动关闭? 如何在没有任何戏剧的情况下继续前进到下一行? while (sdrReader.Read()) // Second exception happens here { try { byte[] byteData = new Byte[(sdrReader.GetBytes(0, 0, null, 0, int.MaxValue))]; // first exception happens here sdrReader.GetBytes(0, 0, byteData, 0, byteData.Length); string strOutputFileName = sdrReader.GetInt32(1).ToString() + “.pdf”; msMemoryStreams = new MemoryStream(); msMemoryStreams.Write(byteData, […]

序列化对象准备通过TCPClient Stream发送

我已经使用TcpListener和TcpClient设置了服务器和客户端。 我想将一个对象发送到我的服务器应用程序进行处理。 我已经发现了using System.Runtime.Serialization和以下文档 ,但我不想发现我正在以漫长的方式做这件事。 问题:通过TCP流处理和发送对象的最佳方法是什么? 发送和接收。 这是我的对象的一个​​例子: // Create a new house to send house newHouse = new house(); // Set variables newHouse.street = “Mill Lane”; newHouse.postcode = “LO1 BT5”; newHouse.house_number = 11; newHouse.house_id = 1; newHouse.house_town = “London”;

在IsolatedStorage中重命名文件

我需要重命名IsolatedStorage中的文件。 我怎样才能做到这一点?

在LINQ中按月和年分组多个日期属性

我需要在C# LINQ按月和按年分组多个属性 这是我的代码: public class Class1 { public Nullable dt1 { get; set; } public Nullable dt2 { get; set; } } Class1 obj1 = new Class1 { dt1 = new DateTime(2012, 11, 12), dt2 = new DateTime(2012, 12, 12) }; Class1 obj2 = new Class1 { dt1 = new DateTime(2012, 11, 12), dt2 = […]

如何在C#中获取IP地址?

假设计算机连接到许多网络(实际上不止一个)。 我可以获得一个IP地址列表,其中包括计算机在网络中的所有IP地址,但我怎么知道IP地址属于哪个网络?

带有一个必需参数和一个可选参数的ASP.NET MVC路由?

在过去一个月左右的时间里,我一直在研究一个大型MVC应用程序,但这是我第一次需要定义一个自定义路由处理程序,而且我遇到了一些问题。 基本上我有两个参数要通过。 第一个是必需的,第二个是可选的。 我在这里听到这个答案。 这是我的自定义路线: routes.MapRoute( “MyRoute”, “{controller}/{action}/{param1}/{param2}”, new { controller = “MyController”, action = “MyAction”, param1 = “”, param2 = “” // I have also tried “UrlParameter.Optional” here. } ); 我的动作方法签名: public ActionResult MyAction(string param1, string param2) 如果我尝试URL http://[myserver]/MyController/MyAction/Test1/Test2那么它就像我期望的那样工作,param1 =“Test1”和param2 =“Test2” 如果我尝试URL http://[myserver]/MyController/MyAction/Test1那么两个参数都为null。 希望有人可以告诉我这里我做错了什么,因为我迷路了。

C#将字符串转换为其byte 等价物

在这一点上,大多数人都会想“这个病了啊……” byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data); 但是..我遇到的问题是我需要字节的确切值,没有编码只是每个字节的纯值。 例如,如果字符串的值是(0xFF32),我希望它也将它转换为{255,50}。 他的理由是我有一个文件格式我试图读取哪些存储int作为字节保存它们然后在程序打开时读取它们。 这是我到目前为止: … dialog.InitialDirectory = Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + “/Test”; dialog.Title=”Open File”; if (dialog.ShowDialog(this) == DialogResult.OK) { StreamReader reader = new StreamReader(dialog.FileName); string data = reader.ReadToEnd(); reader.Close(); byte[] fileC = System.Text.Encoding.ASCII.GetBytes(data); File_Read(dialog.FileName,fileC); } … 因此,当我尝试读取文件时,它会将0xFF的文件修改为0x3F,因为0xFF大于127且0x3F是? 对不起,如果我看起来有点混乱:) 谢谢,迈克尔

使用ODP.Net的问题

我已成功使用Oracle Database 11g第2版(11.2.0.1.0)从.Net连接oracle。 (参考Oracle.DataAccess.dll版本为2.112.1.0)。 但是当我安装ODP.NET并且当我尝试连接到oracle时,它给了我一个错误:“ORA-12154:TNS:无法解析指定的连接标识符”。 我怎么解决这个问题? 谢谢!