代码之家  ›  专栏  ›  技术社区  ›  Charles

生成具有相同命名空间的Silverlight服务代理

  •  0
  • Charles  · 技术社区  · 15 年前

    我需要为同一个命名空间内的多个WCF服务生成服务代理,这在使用VisualStudio的Add Service参考函数时是不可能的。

    我怎么能用自动化的方式做到这一点?我考虑过用 SLsvcUtil ,但这需要我确保可以访问WCF服务,并且,假设我使用的是ASP.NET开发服务器,则需要手动检查URL。

    理想情况下,我可以通过某种方式指定程序集、服务类型、配置(web | app.config)和目标命名空间,然后生成代码。有什么想法吗?

    编辑

    为了澄清这一点,我正试图解决这个连接问题中概述的相同问题:
    http://connect.microsoft.com/VisualStudio/feedback/details/426791/adding-multiple-service-references-from-same-application-should-not-require-multiple-namespaces

    我想要一个无需麻烦的自动化方法来在单个命名空间内生成服务代理。对于我来说,必须为每个服务引用指定唯一的命名空间是不可接受的。使用SLsvcUtil是一个选项,但它要求我启动并运行我的服务,以便它能够读取元数据-这是一个问题,因为我并不总是在任何给定的时间点运行服务的最新版本。

    VS中的“添加服务引用”功能处理这一点——它自动地承载服务足够长时间来获取元数据,然后生成服务契约接口和代理。再一次,它要求每个服务都在自己的、唯一的名称空间中生成代码,这是我不想要的。

    我所需要的是一种用单一的、共享的命名空间来生成服务代理的方法,而不必经过手动托管和启动服务实例的麻烦。理想情况下,我只需双击脚本文件。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Christian Specht    14 年前

    我通常做的是通知复合命名空间。当“添加服务引用”对话框弹出时,我将 Services.ServiceA Services.ServiceB . 然后所有服务名称空间共享公共根 Services.* .

        2
  •  0
  •   Jeff    15 年前

    如果我正确地理解了这个问题,您会担心,因为添加服务引用函数的方式,ServiceContract接口与您在源程序集中定义的接口并不完全相同。

    唯一真正的区别是,添加为SL生成的服务引用的ServiceContract接口定义了异步操作(因为SL不支持同步WCF调用)。剩下的部分 XXXClient : ClientBase 类)如果使用 ChannelFactory<TServiceContractInterface> 直接的。

    我个人最终共享了同步ServiceContract接口,但是使用System.Reflection.Emit.TypeBuilder创建了一个异步操作的服务契约。然后使用一个定制的ChannelFactory,我在动态生成的异步ServiceContract接口周围创建了一个包装器。

    我希望这会有帮助。

    推荐文章