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

时间:2010-10-08 15:42:57

标签: silverlight wcf

我需要在同一名称空间内为多个WCF服务生成服务代理,这在使用Visual Studio的“添加服务引用”功能时是不可能的。

如何以自动方式执行此操作?我考虑过使用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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

唯一真正的区别是Add Service Reference为SL生成的ServiceContract接口定义了异步操作(因为SL不支持同步WCF调用)。如果您直接使用XXXClient : ClientBase,则可以完全绕过其余部分(ChannelFactory<TServiceContractInterface>类)。

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

我希望有所帮助。