是否可以用 C# 创建有状态的 Web 服务?

2024-01-07

我现在有这样的东西:

public class Service1 : System.Web.Services.WebService
{
    [WebMethod]
    public string Method1()
    {
        SomeObj so = SomeClass.GetSomeObj(); //this executes very long time, 50s and more
        return so.Method1(); //this exetus in a moment 
    }

    [WebMethod]
    public string Method2()
    {
        SomeObj so = SomeClass.GetSomeObj(); //this executes very long time, 50s and more
        return so.Method2(); //this exetus in a moment 
    }

 ...
}

是否可以制作有状态的 Web 服务以便我可以重用SomeObj so并只调用同一个对象上的方法?

因此,使用此服务的客户端将首先调用 Web 方法,该方法将创建so对象并返回一些 ID。 然后在后续调用中,Web 服务将重用相同的内容so基于 ID 的对象。

EDIT


这是我的实际代码:

[WebMethod]
public List<ProcInfo> GetProcessList(string domain, string machineName)
{
    string userName = "...";
    string password = "...";
    TaskManager tm = new TaskManager(userName, password, domain, machineName);

    return tm.GetRunningProcesses();
}

[WebMethod]
public bool KillProcess(string domain, string machineName, string processName)
{
    string userName = "...";
    string password = "...";
    (new TaskManager(userName, password, domain, machineName);).KillProcess(processName);               
}

有状态 Web 服务不可扩展,我不会推荐它们。相反,您可以将昂贵操作的结果存储在cache http://msdn.microsoft.com/en-us/library/6hbbsfk6.aspx。该缓存可以通过自定义提供程序进行分发,以获得更好的可扩展性:

[WebMethod]
public string Method1()
{
    SomeObj so = TryGetFromCacheOrStore<SomeObj>(() => SomeClass.GetSomeObj(), "so");
    return so.Method1(); //this exetus in a moment 
}

[WebMethod]
public string Method2()
{
    SomeObj so = TryGetFromCacheOrStore<SomeObj>(() => SomeClass.GetSomeObj(), "so");
    return so.Method2(); //this exetus in a moment 
}

private T TryGetFromCacheOrStore<T>(Func<T> action, string id)
{
    var cache = Context.Cache;
    T result = (T)cache[id];
    if (result == null)
    {
        result = action();
        cache[id] = result;
    }
    return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以用 C# 创建有状态的 Web 服务? 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 为什么此 SPARQL 查询没有返回任何结果?

    通过运行此查询DBpedia SPARQL 端点 http dbpedia org sparql给我带来了很多结果 与institution列填充 select person field institution where person a
  • 为什么 Cortex-A 的复位处理程序位于 0x0 而 Cortex-M3 则不然

    Cortex M3 的初始堆栈指针值位于 0x0 复位处理程序位于 0x4 原因是什么 这样做的设计理由是什么 为什么 ARM 人员不能像 Cortex A 那样将 0x0 留给复位处理程序 然后在复位处理程序内初始化 SP 我认为这属于
  • 使用 SQLITE3 和 Objective C 转换 DATETIME 时出现问题

    我有一个 sqlite3 数据库 其中包含 DATETIME 列 其中包含格式如下的值 2013 01 09 04 00 00 我想弄清楚如何确定时间是上午还是下午 以下是我如何使用 Objective C 从 Sqlite3 DB 读取和
  • Puppeteer chrome 获得活动/可见选项卡

    在 Chrome 扩展中 您可以使用下面的命令来查找窗口中的活动选项卡 chrome tabs query currentWindow true active true 我有一个连接到现有浏览器并获取所有页面的以下代码 我无法确定是否有办法
  • Angularjs:复选框和 ng-change

    我无法理解 ng change 的工作原理 我有一份邀请参加拍卖的用户列表 我想用一个复选框来做到这一点 如果选中用户 则必须将其姓名保存到数组中 稍后我会邀请他们 我只知道该怎么做 但我不明白如何使用该复选框 我做了这样的事情 ul cl
  • 地图视图删除多个图钉

    我想在地图上显示用户位置并放置一个图钉 但我的应用程序放置了两个相距一定距离的图钉 我想知道当新图钉被放置时如何删除旧图钉 以便地图上应该有一个图钉我的代码是 MKAnnotationView mapView MKMapView mV vi
  • 如何安装rabbitmq管理插件(rabbitmq-plugins)

    简短的 有没有办法通过ubuntu包安装rabbitmq plugins Details 我的rabbitmq 在我的ubuntu 系统中运行正常 现在我正在尝试通过管理插件监控正在发生的情况 我正在按照rabbitmq com manag
  • 如何在 .vimrc 文件中“获取”某些内容?

    我最近一直在努力扩展我的 vim foo 并且遇到了几个插件 自动标记 vim http www vim org scripts script php script id 1343例如 要求它们在我的 vimrc 文件中 来源 这到底是什么
  • SQL DATETIME 从 Excel 插入?

    所以我遇到了一个相当奇怪的问题 我在Excel中有一个列 比如说A列 其中的数据如下所示 2015年4月11日 10 14 我还有很多其他列 但无论如何在 Excel 中的 SQL Insert 语句中 数据 复制时 如下所示 42105
  • java中如何转义文件路径中的反斜杠和自动生成的转义字符

    我有一个非常小而简单的问题 但我没有得到解决方案 实际上我正在使用文件选择器获取 CSV 文件路径 我使用加载数据本地 infile 查询将此 csv 文件中的数据输入到数据库中 假设我输入的文件路径是 C title csv 当我将此字符
  • 使用 lldb 调用带有字符串参数的函数:如何?

    我无法使用 lldb 调用采用字符串参数的简单非模板化函数 有没有办法让 lldb 理解 C 数据类型 字符串 这是 C 程序中常用的数据类型 这里的示例源代码只是创建一个带有几个构造函数的简单类 然后调用它们 省略了 iostream 和
  • Java 中什么是可调用的?

    标题几乎概括了它 我想了解 callable 的概念和思想 我读过一篇在这里提问 https stackoverflow com questions 141284 the difference between the runnable an
  • 函数返回另一个函数的返回值

    如果我想打电话Bar 代替Foo does Bar 返回 Foo 返回的副本 额外开销 或者返回与Foo 临时堆栈上的位置 vector
  • 如何使用 Google Apps 脚本获取单元格的格式化值

    我想使用 Google Apps 脚本通过连接 Google 电子表格中所选单元格的值来创建字符串 问题是我不知道单元格是否包含数字 日期或文本 当值是数字或日期时 我想获取格式化值 即它在电子表格中显示的方式 例如 以下函数将返回命名范围
  • TabBarController didSelectViewController 不工作

    我知道这是一个非常重复的话题 但我无法让它发挥作用 主选项卡 h import
  • Django settings.py:单独的本地和全局配置

    我想知道是否可以将 Django 中的 本地 配置 静态的本地路径 必须是绝对的模板内容 本地数据库信息等 与 全局 配置 URL 中间件类 分开 安装的应用程序等 这样几个人就可以通过 Git 或 SVN 处理同一个项目 而不必在每次完成
  • FB.ui 和设置弹出窗口大小

    我正在使用 FB ui 并将显示参数设置为弹出 当方法为 stream publish 时 它会在加载内容时自动调整大小 但是 当使用 fbml dialog 为了显示多好友选择器 时 它显示的大小我无法更改 并且内容显示为裁剪的 我尝试过
  • 将 django-allauth 作为端点插入 django-rest-framework

    我在我的网站上使用 django allauth 进行社交登录 我还有一个由 django rest framework 提供支持的 REST API 用作移动应用程序的后端 有没有办法可以直接将 allauth 的身份验证后端插入 RES
  • js和template标签对比

    如何比较 profile id 和 JavaScript 变量profile id function compare profile id if profile id profilegroup subject id do something
  • 是否可以用 C# 创建有状态的 Web 服务?

    我现在有这样的东西 public class Service1 System Web Services WebService WebMethod public string Method1 SomeObj so SomeClass GetS