同步获取WCF方法调用
大家好 我有 WCF 服务,其中有 OperationContract GetCustomer(); 和OperationContract GetCustomerSetting(int customerId);
在 silverlight 中,m 在 silverlight 页面的 OnLoad 方法上调用 GetCustomer 方法。 然后在 GetCustomerCompleted 方法上为每个客户调用 GetCustomerSetting。
如果我有 10 个客户,其 ID 为 1,2,3...10 我如何确保 GetCustomerSettingCompleted 将同步调用 对于客户 ID 1,然后是 2,然后是 3。
Hi All
I have WCF service which has OperationContract GetCustomer();
and OperationContract GetCustomerSetting(int customerId);
In silverlight m calling GetCustomer method on OnLoad method of silverlight page.
and then calling GetCustomerSetting for each of customer on GetCustomerCompleted method.
if I have 10 customer having Id 1,2,3...10
how do i make sure GetCustomerSettingCompleted will get call synchoronously
for customer id 1 then 2 and then 3.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
无法同步进行 WCF 调用。在 GetCustomerCompleted() 函数中,您将在 e.Result 中获得该函数的返回值(您实际上应该在其中获得客户的 ID)。
在该函数中,只需使用 e.Results 中的 ID 调用 GetCustomerSettings() 即可。
There is no way to make a WCF call synchronously. In your GetCustomerCompleted() function you will have the return value of the function in e.Result (where you should actually have the ID of your Customer).
In that function, just call the GetCustomerSettings() with the ID that is in the e.Results.
看看这里 使用协程的 Silverlight 中的顺序异步工作流此处顺序异步工作流程第 2 部分:简化。 (在我看来)这是一种以同步方式处理多个异步调用的好方法。
have a look here Sequential Asynchronous Workflows in Silverlight using Coroutines and here Sequential Asynchronous Workflows Part 2: Simplified. This is a (in my opinion) nice approach how to handle multiple async calls in a sync way.
如果订单如此重要,那么您应该有一个方法,该方法将客户列表作为参数,并且仅在处理所有客户时才返回(即使客户端异步调用此操作)。
If order is so important then you should have a method that takes a list of customers as a parameter and returns only when all the customers are processed (even if the client calls this operation asynchronously).
您可以扩展您的模型以拥有 isBusy 访问器。调用 WCF 时将 isBusy 设置为 true,完成后将 isBusy 设置为 false。当您看到前一个对象的 isBusy 不再为 true 时,您可以触发下一个对象。
我喜欢这样做,这样我就可以将 isBusy 绑定到我的视图上的操作 - 就像 Telerik 网格视图一样。
You could extend your model to have an isBusy accessor. You'd set the isBusy to true when you call the WCF and false after the completion. When you see that the previous object's isBusy is no longer true, then you can fire the next one.
I like to do it this way so that I can bind the isBusy to an action on my view - like a Telerik grid view.