- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个正在运行的 WCF 服务,我在解决方案资源管理器中使用添加服务引用添加了对该服务的引用,并选中了创建异步操作的框。
我的调用工作正常,我有一个双向 channel 从服务器报告一些事件,我正在接收这些事件。但是,当异步任务在我的回调处理程序中完成时,我收到错误 Unable to cast object of type 'SendAsyncResult' to type 'System.Runtime.Remoting.Messaging.AsyncResult'。
调用方法的代码。
DatabaseManagement.DatabaseManagementClient d = new DatabaseManagement.DatabaseManagementClient(new InstanceContext(new DatabaseManagementCallback()));
d.Open();
d.BeginCreateDatabase("", "PreConfSA", "_test", new AsyncCallback(BeginCreateDatabaseCallback), null);
异步回调
static void BeginCreateDatabaseCallback(IAsyncResult ar)
{
AsyncResult result = (AsyncResult)ar; //Execption happens here
DatabaseManagement.DatabaseManagementClient caller = (DatabaseManagement.DatabaseManagementClient)result.AsyncDelegate;
Console.WriteLine(caller.EndCreateDatabase(ar));
DatabaseManagement.AccountInfo ai = new DatabaseManagement.AccountInfo();
//set up ai here
Console.WriteLine(caller.UpdateInfo("", "_test", ai));
}
异常详细信息
System.InvalidCastException was unhandled by user code
Message=Unable to cast object of type 'SendAsyncResult' to type 'System.Runtime.Remoting.Messaging.AsyncResult'.
Source=Sandbox Console
StackTrace:
at Sandbox_Console.Program.BeginCreateDatabaseCallback(IAsyncResult ar) in E:\Visual Studio 2010\Projects\Sandbox Console\Program.cs:line 26
at System.ServiceModel.AsyncResult.Complete(Boolean completedSynchronously)
InnerException:
我真的不需要 EndCreateDatabase 的结果,但我读到的所有地方都说你必须调用 EndYouFunctionHere() 否则会发生不好的事情。
有什么建议吗?
最佳答案
为服务引用生成的 EndXxx 方法具有签名:
EndXxx(IAsyncResult result);
(至少他们在我的环境中这样做——你看到了什么不同的东西吗?)
因此您实际上不需要执行转换来调用 EndXxx 方法。
但是,在那种情况下,您确实需要一些方法将服务引用(客户端实例)获取到回调方法中,因为您无法使用 AsyncResult.AsyncDelegate
。您可以通过将代理对象存储在成员变量而不是局部变量中来执行此操作,或者将其作为 asyncState 传递给 BeginXxx 方法:
d.BeginCreateDatabase("", "PreConfSA", "_test",
new AsyncCallback(BeginCreateDatabaseCallback),
d); // passing d as asyncState instead of null
然后在回调中从 IAsyncResult.AsyncState 中获取它:
DatabaseManagement.DatabaseManagementClient caller =
(DatabaseManagement.DatabaseManagementClient)ar.AsyncState;
这消除了关于 IAsyncResult 的具体实现的任何假设。
关于c# - 使用服务引用时无法将 IAsyncResult 转换为 AsyncResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2435622/
(只能使用 .NET 3.5 stock,所以没有任务,没有响应式扩展) 我有,我认为这是一个简单的案例,但我对此感到困惑。 简而言之,我将 BeginGetRequestStream 的 IAsyn
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
为什么 IAsyncResult 要求我保留对 BeginInvoked 的委托(delegate)的引用? 我希望能够写出这样的东西: new GenericDelegate(DoSomething
我在 .net WPF 中编程。 我有一个(第三方)API,它实现了开始/结束异步调用模式。 BeginWork() 函数返回一个 IAsyncResult。 但是,一旦完成,没有明显的方法可以取消/
在WaitAll的一些实现中我看到了下面的代码 IAsyncResult result1 = Method.BeginInvoke(10, MyCallback, null) IAsyncResult
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我最近刚接触到 IAsyncResult 并且已经使用了很长时间。我真正想知道的是,当我们有更好的替代 ThreadPool 方法时,为什么还要使用 IAsyncResult?从我目前对两者的理解来看
我使用 Action.BeginInvoke()方法,这是否使用线程池? 我有以下 C# 代码: List hashList1 = hashList.Where((x, ind) => ind
我通常对部分实现接口(interface)持谨慎态度。但是,IAsyncResult 有点特殊,因为它支持几种完全不同的使用模式。您使用/查看使用 AsyncState/AsyncCallback 模
我正在实现一个接口(interface),该接口(interface)需要实现 BeginDoSomething 和 EndDoSomething 方法。然而,我的 DoSomething 并不是真正
我正在使用一些使用 IAsyncResult 模式的旧代码。已经为 Begin- 和 End- 操作定义了委托(delegate)。我应该如何将它们重构为基于任务而不用担心委托(delegate)的实
在异步编程模型中,似乎有 4 种方式(如 Calling Synchronous Methods Asynchronously 中所述)进行异步方法调用。 调用 EndInvoke() 方法使调用线程
当我异步调用一个方法时(使用模式 BeginXxx/EndXxx),我在调用 BeginXxx 后得到一个 IAsyncResult 结果。如果方法 BeginXxxx 或 EndXxx 均未引用结果
我需要创建等待 IAsyncResult 方法完成的机制。我怎样才能做到这一点? IAsyncResult result = _contactGroupServices.BeginDeleteCont
我正在进行 REST 调用,服务器端响应采用 XML 格式。我正在异步进行此调用。我已经将它作为控制台应用程序进行了测试,它可以正常工作。但是,当我在 XBOX 上测试它时,异步请求永远不会完成。我的
几周来我一直在苦恼,我需要一些帮助。这是一个将 RDL 文件复制到项目站点的 SharePoint 实用程序。为什么我的 IAsyncResult.EndInvokes 在处理完整个列表后被调用?平均
我正在考虑为我创建的类增加一些灵 active ,该类建立与远程主机的连接,然后执行信息交换(握手)。当前实现提供了一个 Connect 函数,该函数建立连接,然后阻塞等待 ManualResetEv
我有一个正在运行的 WCF 服务,我在解决方案资源管理器中使用添加服务引用添加了对该服务的引用,并选中了创建异步操作的框。 我的调用工作正常,我有一个双向 channel 从服务器报告一些事件,我正在
如果我想继承 ChannelBase,WCF 需要我实现 IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, obje
我需要以下方面的帮助。这与异步套接字有关。 来自发件人: string stringData = "Welcome to my server server server"; byte[] messag
我是一名优秀的程序员,十分优秀!