ServiceReferences.ClientConfig中的动态端点
构建应用程序时,它通常部署在不同的环境(test,dev,prod)中,因此端点地址也在不断变化。 由于ServiceReferences.ClientConfig是作为Silverlight的.xap文件的一部分构建的,因此在构建解决方案后很难更改端点,这通常是通过web.config完成的。
我已经搜索了很多,但我不知道这里的最佳做法是什么,所以我的问题是:
在Silverlight中进行动态wcf端点地址配置时,最佳做法是什么?
为了澄清,根据应用程序所在的服务器(test,dev,prod),端点会发生变化:
在某种程度上,我需要silverlight客户端知道使用哪一个,具体取决于它在哪个服务器上/哪个构建编译。
在阅读sLedgem的post和一些谷歌搜索之后,我找到了使ServiceReferences像web.config一样的完美解决方案。
首先:手动创建不同的文件;
ServiceReferences.Debug.ClientConfig ServiceReferences.Release.ClientConfig
如果在Visual Studio中有两个以上的默认配置,也可以添加自己的。
第二步:在Project.csproj文件中添加文件依赖项(在文本编辑器中打开项目文件):
Always ServiceReferences.ClientConfig ServiceReferences.ClientConfig
现在,当您重新加载项目时,您将看到ServiceReferences.Release.ClientConfig在解决方案资源管理器中是可扩展的,当您展开它时,您将看到Release和Debug文件。
第三步:在结束之前将转换规则添加到Project文件中
(再次,在文本编辑器中打开它)
$(TargetFileName).ClientConfig
它的作用是查看相应的servicereferences文件,具体取决于您的配置,并使用web.config使用的相同TransformXML库复制/替换代码。
例:
在我的ServiceReferences.ClientConfig中,我有以下代码:
ServiceReferences.Release.ClientConfig:
如您所见,将替换端点,并在name属性上完成匹配。
如果您有任何疑问,请告诉我:)
这个问题很好的解决方案
我无法让
部分在我的解决方案中有效地工作。
我将其删除并将以下脚本添加到项目中的Prebuild事件中:
del $(ProjectDir)ServiceReferences.ClientConfig; copy $(ProjectDir)ServiceReferences.$(ConfigurationName).ClientConfig $(ProjectDir)ServiceReferences.ClientConfig;
您可以在运行时通过使用SL中的WCF客户端的构造函数来执行此操作,该构造函数采用端点配置名称和地址。 端点配置名称在您的示例中只是“MyService”。 您提供的地址参数将覆盖ClientConfig中包含的参数。
在运行期间从SL计算服务地址的方法之一是(我不保证它可以在每个环境配置中工作):
- 计算站点的根目录,例如通过查找Application.Current.Host.Source.AbsoluteUri和HtmlPage.Document.DocumentUri.AbsoluteUri的公共部分。 基本上,只要在另一条路径中匹配不区分大小写的字符,就可以从较短路径的开头获取字符。
- 如果有的话,附加服务的相对路径(这里似乎不是这种情况)。
- 附加MyService.svc
额外信息:
当你有很多服务时,这可能看起来很复杂,但它可以很好地重构,并且在Unity的帮助下很容易用于任何服务。 例如,我使用一个辅助函数来注册一个服务客户端,它的调用如下所示:ServicesHelper.RegisterService
看看这里:
https://weblogs.asp.net/srkirkland/archive/2009/10/13/common-web-config-transformations-with-visual-studio-2010.aspx
然后在这里
https://www.funkymule.com/post/2010/03/08/XML-Transform-on-Silverlight-ClientConfig-Files.aspx
它使用web.config转换背后的相同原理(即,web.config根据您正在编译的配置(即发布,调试)而更改,以便在编译时根据您的心血来潮改变serviceref.config。魅力
除了一件小事之外,randoms的反应很明显。 不要将.Debug.ClientConfig和.Release.ClientConfig标记为“内容”。 将它们标记为“无”。 这样你的.Debug.ClientConfig和.Release.ClientConfig就不会放入.xap文件中。 这是我的Silverilght项目文件中的内容(并且效果很好):
上述就是C#学习教程:ServiceReferences.ClientConfig中的动态端点分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Always ServiceReferences.ClientConfig ServiceReferences.ClientConfig ServiceReferences.ClientConfig
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1033889.html