当前位置: 首页 > 编程语言 > C#

ServiceReferences.ClientConfig中的动态端点共享

时间:2023-04-10 22:19:34 C#

ServiceReferences.ClientConfig中的动态端点在构建应用程序时,通常会部署在不同的环境中(测试、开发、生产),因此端点地址是不断变化的。由于ServiceReferences.ClientConfig是作为Silverlight的.xap文件的一部分构建的,因此在构建解决方案后很难更改端点,这通常是通过web.config完成的。我搜索了很多,但我不知道这里的最佳实践是什么,所以我的问题是:在Silverlight中动态wcf端点地址配置的最佳实践是什么?澄清一下,根据应用程序所在的服务器(测试、开发、生产),端点会发生变化:在某些时候,我需要silverlight客户端知道要使用哪个,这取决于它是在哪个服务器/哪个版本上编译的.阅读sLedgem的帖子和一些谷歌搜索后,我找到了使ServiceReferences像web.config一样的完美解决方案。第一:手动创建不同的文件;ServiceReferences.Debug.ClientConfigServiceReferences.Release.ClientConfig如果您在VisualStudio中有两个以上的默认配置,您也可以添加自己的配置。第二步:在Project.csproj文件中添加文件依赖项(在文本编辑器中打开项目文件):AlwaysServiceReferences.ClientConfigServiceReferences.ClientConfig现在,当您重新加载项目时,您将在解决方案资源管理器中看到ServiceReferences.Release.ClientConfig是可扩展的,当您展开它时,您将看到Release和Debug文件。第3步:在关闭前将转换规则添加到项目文件中(同样,在文本编辑器中打开它)使用与web.config使用的相同TransformXML库的代码。示例:在我的ServiceReferences.ClientConfig中,我有以下代码:ServiceReferences.Release.ClientConfig:如您所见,端点已被替换,并且匹配是在名称属性上完成的。如果您有任何问题,请告诉我:)这个问题的很好的解决方案我无法让该部分在我的解决方案中有效地工作。我将其删除并将以下脚本添加到项目中的Prebuild事件中:del$(ProjectDir)ServiceReferences.ClientConfig;复制$(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("MyService");当我需要创建服务客户端的实例时,我只需使用Unity来解析MyServiceContractClient类型,它使用注入构造函数创建一个正确配置的新服务实例。它还可以处理HTTPS情况。如果您需要更多信息,请联系我们。看看这里:http://weblogs.asp.net/srkirkland/archive/2009/10/13/common-web-config-transformations-with-visual-studio-2010.aspx和这里http://www.funkymule.com/post/2010/03/08/XML-Transform-on-Silverlight-ClientConfig-Files.aspx它使用web.config转换背后的相同原则(即,web.config基于您正在编译的配置(即发布,调试)根据您的心血来潮在编译时更改serviceref.config。随机的魅力是显而易见的,除了一件小事。不要将.Debug.ClientConfig和.Release.ClientConfig标记为“内容”。标记它们为“无”。这样你的.Debug.ClientConfig和.Release.ClientConfig就不会被放入.xap文件中。这是我的Silverilght项目文件中的内容(并且效果很好):以上是C#教程的所有内容:ServiceReferences中的动态端点,希望大家多多关注——AlwaysServiceReferences.ClientConfigServiceReferences.ClientConfigServiceReferences.ClientConfig本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: