问题标签 [asynchronous-wcf-call]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3005 浏览

wcf - 多次异步调用 WCF 期间出现异常(无法处理消息...)

我收到来自 WCF 客户端的“无法处理消息...”错误。请帮助,它正在杀死我。

我有一个测试获胜应用程序,它通过一个for循环来启动x个异步调用。每个异步调用都会实例化它自己的 WCF 代理实例,并使用该代理调用 WCF 服务。如果x约为 35 或更小,则一切正常。如果x > 40 左右,许多调用都可以正常完成,但少数会返回:

我正在使用具有消息安全性的客户端和服务器端证书。我不明白为什么它只运行了一定次数,然后呕吐。它似乎也会在接近迭代结束的调用上引发错误。此外,此错误发生在我的任何超时之前很久,在客户端和服务器端设置相同:

此外,我正在使用服务限制:

有任何想法吗?

谢谢,马克。

0 投票
2 回答
388 浏览

asynchronous-wcf-call - Web服务批量更新

是否有令人信服的理由在 .NET Web 服务中提供“批量更新”版本的更新方法?

通过 HTTP 进行多次异步或同步调用是否有相当大的优势?

我的第一个冲动是提供异步调用并在输入组合中包含一个记录 ID,并拒绝提供批处理操作作为微优化的要求。或者,我会要求消费者使用迭代循环并进行多次调用。

我不想提出一个糟糕的建议。

0 投票
1 回答
1334 浏览

c# - 异步 WCF 查询最后一步

我正在尝试学习如何实现异步模式以同时查询多个 wcf 服务,但不知道如何检查所有并发调用是否已完成。我有一个执行异步操作的类,然后在操作完成时添加到列表中:

我的两个问题是:

1) 我如何确保只有在所有并发调用完成后才能获得列表结果?例如,如果在循环中调用 GetAsync(),启动多个并发进程,我需要确保它们都已完成,然后再将数据从列表结果中取出。

2) 我可以在 GetContinuation() 调用中使用 BeginExecute() 并递归地使用与回调函数相同的方法 GetAsyncComplete() 吗?或者这会创建大量线程并实际上减慢速度。

谢谢你。

0 投票
1 回答
899 浏览

wcf - 通知 WCF 服务取消当前执行的操作并返回剩余数据。

我有这个客户端应用程序,它向我的 wcf 服务发送数千个要删除的项目。由于数据是批量发送的,即使我取消操作(带进度条),所有项目都会被删除。我想要的行为是能够取消服务中的删除操作并检索未删除的项目。谢谢你。

0 投票
1 回答
773 浏览

c# - 使用 IIS 和异步方法的 WCF 的最大并发会话数 - 释放资源

我正在从表单调用 WCF 服务。服务托管在 IIS 中。该服务具有以下属性:InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple

我已将所有并发调用、实例和会话的限制行为设置为最大 2000。

但是我似乎无法收到超过 200 个异步请求。之后服务就没有响应,会话最终超时。

我正在使用异步调用来调用服务中的方法,即 复制代码

IASyncResult res= Proxy.BeginMethod(endCall,null);

然后为了捕捉响应,我有一个 endCall 函数,它接收 IASyncResult 并通过 EndMethod() 处理结果。

在负载模拟@ 1 方法调用一秒钟,一切正常,直到大约 200 个调用,然后只是等待......(此时我有 199 或 198 个来自这 200 个调用的响应).. - 所以理论上存在不应该是 200 个并发会话,只有 2 个左右..

也许有一些我没有做的垃圾收集或关闭?有什么建议么?

- - 更新 - -

我认为答案可能更多的是代理的关闭不是以线程安全的方式处理的。正如 Radik 上面指出的那样,关闭代理很重要,但是随着许多 IASyncState 结果同时出现,您必须确保在正确的时间关闭正确的结果。

我确实尝试从一个线程中触发关闭代理以让它单独处理它:

ThreadPool.QueueUserWorkItem(CloseProxy, ar.AsyncState);

但这似乎不起作用。对此有何建议?

0 投票
1 回答
435 浏览

c# - 来自 Windows 服务的异步 WCF 服务调用

我编写了一个利用异步 WCF 服务调用的 Windows 服务。经过测试,似乎服务上的方法执行得很好,但是对我的 Windows 服务本身的回调没有得到处理。

阅读日志后,我遇到了以下条目,我的异步服务调用应该已返回:

这可能与运行服务的帐户有关,还是有其他原因导致这种情况发生?这个在 NetworkService 下。

0 投票
1 回答
1512 浏览

java - 您可以使用 Java 和 REST Web 服务进行异步通信吗?

您能否在使用有时需要几分钟才能返回值的 REST Web 服务的客户端上与 Java 进行异步通信?

在查看以下内容后,我认为不是。但是 C# 确实允许这样做

用户1019776

进行异步 WCF 调用时首选哪种方式?WCF 异步回调

但它们适用于 REST 吗?可能不是。

重新客户端: 您如何使 WCF 客户端异步?

答:要处理异步 WCF 事件,您可以通过 Event 方法使客户端异步,请参阅:http: //msdn.microsoft.com/en-us/library/wewwczdw.aspx

(但要确保它是一个异步的“触发并忘记”事件),另请参阅 Java 上的这个线程(更多的是发布者/订阅者同步模型:Java 是否具有对事件的本机支持,类似于 C#?

0 投票
1 回答
599 浏览

wcf - 从 Silverlight 循环调用 WCF 服务,异步处理程序中的返回值始终相同

我的同事有以下问题:

Silverlight 应用程序有一个 ID 列表,并为每个 ID 调用 WCF 服务以查找与该 ID 匹配的对象。然后通过异步“已完成”处理程序将匹配对象返回给 Silverlight 应用程序。Silverlight 端的调用是在循环中进行的,WCF 执行一些数据库访问,查找并更新对象并返回它。Silverlight 完成的处理程序然后捕获返回,并将对象填充回集合中。

问题是由于某种原因,收到的对象列表都是同一个对象。使用断点,Silverlight 应用程序发送正确的对象,WCF 接收并返回正确的对象,但是当接收返回的对象时,Silverlight 应用程序不断获取相同的对象(但返回正确数量的对象)。

下面的示例来说明问题(简化版本,而不是实际代码):

最后是(简化的)WCF 服务功能:

我们通过发送和接收整个集合找到了解决问题的方法,但仍然对原始问题的原因感到好奇。

0 投票
1 回答
755 浏览

wcf - WCF 异步调用 - 事件处理程序中的异常

WCF 异步调用 - 事件处理程序中的异常

我正在使用事件处理程序对 WCF 方法进行异步调用。我在“EventAddCallback”事件中收到错误,“e.Error”显示以下错误。有谁知道为什么?我添加了示例代码、错误信息、跟踪信息和我尝试过的选项..

System.Reflection.TargetInvocationException:操作过程中发生异常,导致结果无效。检查 InnerException 以获取异常详细信息。---> System.ServiceModel.CommunicationException: 接收到https://demosite.com/ourservice.asmx的 HTTP 响应时出错. 这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。---> System.Net.WebException:底层连接已关闭:接收时发生意外错误。---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭

我启用了跟踪,它显示..

0 投票
2 回答
6443 浏览

c# - WCF 调用一个函数而不等待它完成它的工作?

在客户端,每次我从 WCF 服务调用函数时,它都会等到 WCF 服务中的函数完成,就像调用本地函数一样。所以我为每个在新线程中启动预期函数的函数添加了一个额外的函数,所以我几乎所有的函数都是这样的:

EX:我从CLIENT
调用一个函数:client.ReceiveFile()

在服务器中,我必须这样做:

关键是,当我从客户端发送文件时,它告诉服务开始接收,但如果我没有启动新线程,客户端将等待服务接收文件,并且不会发送文件数据。

WCF 是否支持一种不让客户端等待服务功能完成的方式!或者我将不得不使用上述方法?