我一直在学习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方法的生成接口。如果是,就是必须将服务客户端类型强制转换到的接口。如果没有,也许情况已经从一年前改变了。