在.Net控制台应用程序中托管了一个WCF服务。客户端为具有回调的服务创建双工通道。它以这种方式调用服务:
var task = Task<object>.Factory.FromAsync(clientRay.Proxy.BeginCalc, clientRay.Proxy.EndCalc, lst_RaySrvcDetails, state);
以下是服务控制台应用的主要方法:
static void Main(string[] args)
{
ServiceHost srvcHost = new ServiceHost(serviceInstance, uriBase);
//
//Here the service is hosted
//
while(true)
{
;
}
}
MyService.cs通过以下方法接收调用:
public IAsyncResult BeginCalc(List<MBSWaldram.DataAccessLayer.Framework.ServiceDetails> input,
AsyncCallback callback, object state)
{
calcInput = input;
// Create a task to do the work
var task = Task<object>.Factory.StartNew(this.CalcTasks, state);
return task.ContinueWith(res => callback(task));
}
现在运行实际任务的CalcTasks方法与在WCF Windows窗体应用程序上使用它相比,显示的性能较低。我能想到的一个原因是我使用while(true){;}无限循环的方式,以便应用程序不会终止并等待来自客户端的调用。不确定这是最好的。出于某种原因,我无法使用Windows Form Application。
我很感激,如果有人能解释为什么会出现性能问题。 感谢。
答案 0 :(得分:2)
while (true) {;}
真是不走运的建筑。在控制台应用程序中,请改为Console.ReadLine()
。应用程序将等到Enter press。