有人在2008年问过一个关于proxy-generation of client-side behaviors的问题,我想重复一遍。我希望当我在add-service-reference对话框上执行“discover”时,由Visual Studio(或svcutil)“确认”自定义客户端行为(作为服务契约或操作上的属性修饰)。结果将是已经自动添加客户端行为(和程序集引用)的代理。
从VS 2010 SP1开始,该功能似乎仍然无法使用。 VS 2012会这样做吗?是否有第三方工具可以做到这一点?
P.S。需要说明的是,我并不是要求扩展WSDL功能。我不认为上述技巧会对此有所帮助。我正在严格地谈论Visual Studio的内置代理生成功能中的“发现”按钮。
答案 0 :(得分:0)
我不确定是否可以使用svcutil / add服务引用,但作为替代方案,.NET Framework有一个名为MetadataResolver的类,它允许您在运行时从MEX / wsdl端点获取配置
具体来说,您调用Resolve
方法返回ServiceEndpointCollection实例。 ServiceEndpoint具有Behaviors属性,该属性返回服务上定义的行为集合。
在这种情况下,您不必使用属性修饰类,而是调用服务来检索您的行为。这样做的好处是允许您在一个地方(服务)定义客户端和服务器的配置并使它们保持同步(而不是需要在客户端上完成的服务配置更新)。否定的是你现在在调用服务时进行了两次调用(虽然我过去通过使用静态实例并在内存中保留Resolve方法的响应来缓解)并且需要公开服务元数据。