【问题标题】:How to unhide Silverlight WCF BeginXXXX and EndXXXX service calls如何取消隐藏 Silverlight WCF BeginXXXX 和 EndXXXX 服务调用
【发布时间】:2011-08-11 12:02:40
【问题描述】:

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

Silverlight 的重要说明!
Silverlight 的 Web 服务生成的客户端代码做了一些事情 烦人的——它隐藏了 BeginXXXX/EndXXXX 调用,大概是为了 使 Intellisense 更清洁。然而,它们并没有消失,就像你一样 可以通过将 MyCoolServiceClient 对象转换为其 底层接口(即 LanguageServiceClient 对象有一个 生成它实现的ILanguageServiceClient接口)

See entire blog post here

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

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

    Service1Client scClient = new Service1Client();

我将如何施放它?我试过了……

((IService1Client) scClient)

但无济于事......非常感谢任何建议。

【问题讨论】:

  • 我给这个问题一个赞成票!

标签: silverlight system.reactive


【解决方案1】:

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

 Service1 scClient = new Service1Client();

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

【讨论】:

  • 我认为你的意思是 IService1 scClient = new Service1Client();然后使用 scClient 实例。
  • @Jim:不,我的意思是Service1。如果您在 Web 项目中创建名为 Service1 的 WCF 服务,那么 Microsoft.Silverlight.ServiceReference 将在您的 silverlight 项目中自动生成一个名为 Service1 的接口,其中列出了所有标有 OperationContract 的方法(以开始/结束对的形式)。然后它会创建一大堆其他类,其中一个是实现Service1Service1Client。在这种情况下,没有以字母“I”为前缀的接口。
【解决方案2】:

表示生成的代码包含explicitly implement接口的类型。这样做的原因有很多;我不确定这里的架构考虑是什么,因为我从来没有做过你正在做的事情。

您应该检查您的Service1Client 以查看它是否实现了包含这些 Begin/End 方法的生成接口。如果是这样,that 是您必须将服务客户端类型转换为的接口。如果不是,也许一年前事情已经发生了变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多