防止同时调用WCF函数
本文关键字:WCF 函数 调用 | 更新日期: 2023-09-27 18:10:04
我有一个WCF服务作为windows服务运行。这个服务引用一个包含类X和一个公共方法func1的DLL。func1使用任务(TPL)异步调用另一个方法func2(私有)。Func2独立执行长时间运行的任务。设置如下:
WCFpublic string wcfFunc()
{
X obj = new X();
return obj.func1();
}
DLL
public class X
{
static bool flag;
public X()
{
flag = true;
}
public string func1()
{
if (!flag)
return "Already in action";
Task t = null;
t = Task.Factory.StartNew(() => func2(),TaskCreationOptions.LongRunning);
return "started";
}
void func2()
{
try
{
flag = false;
//Does a long running database processing work through .Net code
}
catch (Exception)
{
}
finally
{
flag = true;
}
}
}
从网站调用WCF函数。多个用户同时使用该网站。不允许两次执行数据库处理func2。任何用户都可以触发它。但是在执行期间,如果任何其他用户试图触发它,它应该显示处理已经在运行。我尝试使用静态变量"标志"来检查它,但它似乎不工作。
解决方案吗?
您可以阅读下面的文章,为了防止对WCF服务方法的多次调用,除了设置并发模式外,您还需要首先确保只能创建一个服务实例。
简而言之,对你的ServiceBehavior做以下修改:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode=InstanceContextMode.Single)]
public class YourService: IYourService
{...}
注意:这将禁用你的服务公开的所有方法的并发性,如果你不希望这样,你必须将所需的方法移动到一个单独的服务,然后像上面那样配置它。