如何取消隐藏Silverlight WCF BeginXXXX和EndXXXX服务调用



我一直在学习RX和Silverlight,并发现了一篇展示如何使用Observable实现Silverlight wcf服务的博客文章。Rx中的FromAsyncPattern。在博客文章中,它有一个对Silverlight开发人员的说明…

Silverlight的重要提示!
Silverlight的web服务生成的客户端代码做了一些事情讨厌-它隐藏了BeginXXXX/EndXXXX调用,大概是为了使智能感知更干净。然而,他们并没有像你那样消失可以通过将MyCoolServiceClient对象转换为它的底层接口(即LanguageServiceClient对象有一个生成的ILanguageServiceClient接口)

查看全文

虽然我可以看到BeginXXX和EndXXX方法对于我的服务来说肯定是隐藏的,但是当他说你需要将ServiceClient转换为接口时,我不确定他是什么意思。

如果我已经生成了Service1Client的实例,例如

    Service1Client scClient = new Service1Client();

我该如何转换它?

((IService1Client) scClient)

但是没有用……

您将发现有一个接口仅具有名称Service1,并且Service1Client实现了该接口。是的,我知道这很奇怪,但是没有语法规则规定所有的接口类型都以字母"I"开头。因此将代码改为:-

 Service1 scClient = new Service1Client();

然后使用Service1,它具有更简单的开始/结束异步模式。只是要小心,因为传递给Begin的回调不会在UI线程上执行。

这意味着生成的代码包括显式实现接口的类型。这样做有很多原因;我不确定这里有什么架构上的考虑,因为我从来没有做过你正在做的事情。

您应该检查您的Service1Client,看看它是否实现了包含这些Begin/End方法的生成接口。如果是,就是必须将服务客户端类型强制转换到的接口。如果没有,也许情况已经从一年前改变了。

相关内容

  • 没有找到相关文章