我正在使用Silverlight,WCF组合。
目前,我遇到服务响应方面的一个问题。
我正在使用请求响应服务类型。
我有100个项目,我将调用100个服务来获取它的属性。
foreach (ItemDto item in items)
{
ServiceCall();
ServiceSendCount++;
}
private void OnServiceCallCompleted(.....)
{
ServiceReceiveCount++;
}
如果我发送5个服务呼叫,则返回5 * 5 = 25个响应。 与我发送10个服务呼叫相同,然后返回10 * 10 = 100个响应。
我无法弄清楚问题是什么......
任何人都可以对此有所了解吗?
请在此处找到服务电话的方法。 我同意每次我发送OnServiceCallCompleted ..
foreach (ItemDto item in items)
{
itemPropertyService.GetItemProperties([parameters] , OnServiceCallCompleted);
ServiceSendCount++;
}
private void OnServiceCallCompleted(.....)
{
ServiceReceiveCount++;
/* here contains my logic to process the response
If it cames mulriple time then my logic will down
*/
}
您能告诉我相同的解决方案吗?由于现在无法改变服务。
但它会产生响应时间问题。
假设我要一次发送100件物品的请求。
在我的第一个approch中,我将以5-10秒的时间获得正确数据的前100个回复。
ItemPropertyService itemPropertyService = new ItemPropertyService();
foreach (ItemDto item in items)
{
itemPropertyService.GetItemProperties([parameters] , OnServiceCallCompleted);
ServiceSendCount++;
}
(我讨论的问题是它会向我发送100 X 100响应,导致超时)
在第二篇Approch中,(按照你的建议)
foreach (ItemDto item in items)
{
ItemPropertyService itemPropertyService = new ItemPropertyService();
itemPropertyService.GetItemProperties([parameters] , OnServiceCallCompleted);
ServiceSendCount++;
}
我收到的回复与请求相同,但大约需要2分钟。
实际上,我无法弄清楚耗时的问题。 由于我们的要求非常庞大,所以需要时间。
你知道如何解决这个问题吗?
我快要解决我的问题了。
答案 0 :(得分:2)
由于您没有显示ServiceCall()函数,因此无法从代码中判断出来,但数字建议您重复使用相同的代理对象,并在每次发出请求时添加OnServiceCallCompleted事件处理程序。如果多次添加相同的事件处理程序,它将多次触发,并且完成的事件处理程序是每个代理对象而不是每个请求。
尝试为每个请求创建一个新的代理对象,看看你是否还有多个回复。