【发布时间】:2014-04-21 12:33:43
【问题描述】:
我知道这方面的信息遍布整个互联网,但我找不到任何特定于我的场景的解决方案。
我正在使用 .NET 4.5 VS 2012
我已经创建了一个 WCF 服务
#region ISampleService Members
public IAsyncResult BeginServiceMethod(string msg, AsyncCallback callback, object asyncState)
{
Thread.Sleep(10 * 1000);
return new CompletedAsyncResult<String>(msg.ToUpper());
}
public string EndServiceMethod(IAsyncResult result)
{
CompletedAsyncResult<String> res = result as CompletedAsyncResult<String>;
return res.Data;
}
#endregion
现在我需要做的是从 BeginServiceMethod 调用另一个方法,它最终会启动一个后台工作程序来执行它的操作。在后台工作人员完成事件中,我想继续执行 EndServiceMethod。
我不知道这是否可能,或者它是否是一个好的设计。实际上,我在将旧代码迁移到新框架时遇到了这个问题,只是想在设计和代码上做一些改进。
[编辑]
换句话说,我可以说我需要在 beginX 和 endX 方法之间插入我的操作。
【问题讨论】:
-
通常,Begin and End 模式应该足够好。为什么需要后台工作者?最终,这一切都取决于被迁移的方法的作用。如果您可以分享更多关于需要做什么的信息,那么有人将能够帮助您。查看您问题中发布的示例,我认为没有必要拥有后台工作人员。
-
感谢您的回复。我不想在 IIS 中托管它,所以每个请求都将由同一个线程处理,我不想阻塞调用线程
-
不要创建单例服务。你检查过 WCF 实例上下文模式吗? msdn.microsoft.com/en-us/library/… 设置正确的上下文模式将确保您的服务不被阻塞
-
我需要知道和理解的工作是为什么在大多数情况下如果方法被一个接一个地调用就会被拆分,除非在某些情况下我在互联网上发现调用了另一个服务。 codeproject.com/Articles/234085/…
标签: c# .net wcf asynchronous