GVKun编程网logo

引用:Silverlight程序中动态设置WCF服务地址方法【附示例代码】http://www.aspxcs.net/HTML/2345222075.html#

5

以上就是给各位分享引用:Silverlight程序中动态设置WCF服务地址方法【附示例代码】http://www.aspxcs.net/HTML/2345222075.html#,同时本文还将给你拓展

以上就是给各位分享引用:Silverlight程序中动态设置WCF服务地址方法【附示例代码】http://www.aspxcs.net/HTML/2345222075.html#,同时本文还将给你拓展.NET Core、.NET Standard 、ASP.NET Core 和 .NET Framework 有什么不同?、ASP.NET Core (.NET Core) and ASP.NET Core (.NET Framework)区别、ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction、asp.net – Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction.任何人都可以描述不同之处等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

引用:Silverlight程序中动态设置WCF服务地址方法【附示例代码】http://www.aspxcs.net/HTML/2345222075.html#

引用:Silverlight程序中动态设置WCF服务地址方法【附示例代码】http://www.aspxcs.net/HTML/2345222075.html#

Silverlight程序中动态设置WCF服务地址方法【附示例代码】

发布时间:2010年05月22日 点击数: 491 次 佚名

Silverlight项目中添加服务引用后会在Silverlight项目中生成一个ServiceReferences.ClientConfig文件,这个文件中包含了引用服务的绑定(bindings)和终结点(Endpoint)的配置信息。下面是引用一个WCF服务后自动生成的配置信息:【示例源码下载

  1. <configuration>
  2. <system.serviceModel>
  3. <bindings>
  4. <basicHttpBinding>
  5. <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647"
  6. maxReceivedMessageSize="2147483647">
  7. <security mode="None" />
  8. </binding>
  9. </basicHttpBinding>
  10. </bindings>
  11. <client>
  12. <endpoint address="http://localhost:4177/Services/Service1.svc"
  13. binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
  14. contract="ServiceReference1.IService1" name="BasicHttpBinding_IService1" />
  15. </client>
  16. </system.serviceModel>
  17. </configuration>

在程序开发阶段,使用上面的配置信息不会有什么错误。在部署程序时,服务的地址通常和开发时使用的服务地址是不一样的,这时就需要修改上面的配置信息中的终结点的地址。但是Silverlight项目编译后会将ServiceReferences.ClientConfig嵌入到生成的xap文件中,这给修改带来了一定难度。关于动态设置服务终结点的地址Tim Heuer在Managing service references and endpoint configurations for Silverlight applications(http://zdd.me/managingendpoint)中介绍了几种方法,大家可以参考。下面是我在开发过程使用的两种方法。
一、WCF和Silverlight位于同一站点下
这种情况下可以通过Silverlight程序的Application.Current.Host.source和服务的相对地址来获得服务的地址。例如名为Service1.svc的服务放在网站的Services文件夹下,可以通过下面的代码取得它的地址:

  1. Uri serviceUri = new Uri(Application.Current.Host.source,"../Services/Service1.svc")

然后就可以通过在引用服务时自动生成的客户端代理类的重载构造函数

  1. public Service1Client(System.ServiceModel.Channels.Binding binding,System.ServiceModel.EndpointAddress remoteAddress) :
  2. base(binding,remoteAddress) {
  3. }

来新建一个该类实例了

  1. BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
  2. binding.MaxReceivedMessageSize = int.MaxValue;
  3. binding.MaxBufferSize = int.MaxValue;
  4. ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(binding,new EndpointAddress(
  5. new Uri(Application.Current.Host.source,"../Services/Service1.svc")));

二、WCF位于单独的站点下
这种情况下WCF的地址和网站的地址不一样了,因此就不能使用上面的方法了。这时可以将服务的地址配置在网站的web.config中,然后通过Silverlight的InitParams参数将服务地址传送到Silverlight程序中。下面是实现方法:
1、在web.config中配置服务的地址

  1. <appSettings>
  2. <!-- 格式 服务名svc -->
  3. <add key="Service1svc" value="http://localhost:1468/Service1.svc"/>
  4. </appSettings>

2、通过使用Literal控件动态生成Silverlight的InitParams参数

然后在网页的Page_Load中从web.config中获取到配置的服务地址并设置InitParams参数的值

  1. protected void Page_Load(object sender,EventArgs e)
  2. {
  3. if (!Page.IsPostBack)
  4. {
  5. Hashtable services = new Hashtable();
  6. foreach (string key in ConfigurationManager.AppSettings.AllKeys)
  7. {
  8. if (key.EndsWith("svc",StringComparison.CurrentCultureIgnoreCase))
  9. {
  10. services.Add(key,ConfigurationManager.AppSettings[key]);
  11. }
  12. }
  13. StringBuilder sb = new StringBuilder();
  14. foreach (string key in services.Keys)
  15. {
  16. sb.Append(string.Format(",{0}={1}",key,services[key]));
  17. }
  18. this.SLInitParams.Text = string.Format("<param name=/"InitParams/" value=/"{0}/" />",sb.ToString());
  19. }
  20. }

3、接着在Silverlight的Application_Startup中将参数中的值存储在ResourceDictionary,以备使用。然后在Silverlight项目中添加一个ServiceType枚举,用于列出在web.config中配置的所有服务地址的键值。
4、新建一下ServiceHelper泛型类,该类包括两个静态方法:1)GetInstance接受一个ServiceType类型的参数,通过反射创建一个服务的客户端代理类的实例;2)GetServiceAddress同样接受一个ServiceType类型的参数,获取服务的地址。

  1. public class ServiceHelper<T> where T : class
  2. {
  3. /// <summary>
  4. /// 根据服务类型新建一个服务实例
  5. /// </summary>
  6. /// <param name="serviceType">服务类型</param>
  7. /// <returns></returns>
  8. public static T GetInstance(ServiceType serviceType)
  9. {
  10. T _instance = null;
  11. string serviceUri = GetServiceAddress(serviceType);
  12. if (string.IsNullOrEmpty(serviceUri)) return null;
  13. object[] paras = new object[2];
  14. BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
  15. binding.MaxBufferSize = int.MaxValue;
  16. binding.MaxReceivedMessageSize = int.MaxValue;
  17. EndpointAddress address = new EndpointAddress(new Uri(serviceUri,UriKind.Absolute));
  18. paras[0] = binding;
  19. paras[1] = address;
  20. ConstructorInfo constructor = null;
  21. try
  22. {
  23. Type[] types = new Type[2];
  24. types[0] = typeof(System.ServiceModel.Channels.Binding);
  25. types[1] = typeof(System.ServiceModel.EndpointAddress);
  26. constructor = typeof(T).GetConstructor(types);
  27. }
  28. catch (Exception)
  29. {
  30. return null;
  31. }
  32. if (constructor != null)
  33. _instance = (T)constructor.Invoke(paras);
  34. return _instance;
  35. }
  36. /// <summary>
  37. /// 取得服务地址
  38. /// </summary>
  39. /// <param name="serviceType">服务类型</param>
  40. /// <returns></returns>
  41. public static string GetServiceAddress(ServiceType serviceType)
  42. {
  43. return App.Current.Resources[serviceType.ToString()].ToString();
  44. }
  45. }

然后就可以通过下面的代码创建一下服务的客户端代理类的实例了

.NET Core、.NET Standard 、ASP.NET Core 和 .NET Framework 有什么不同?

.NET Core、.NET Standard 、ASP.NET Core 和 .NET Framework 有什么不同?

经查阅.Net Core相关资料:

  1. https://www.infoq.cn/article/2017%2F10%2Fdotnet-core-standard-difference
  2. https://blog.csdn.net/yiyelanxin/article/details/84439216

对.NET Core、.NET Standard 、ASP.NET Core 和 .NET Framework有了初步的了解:

 

.NET Core

  .NET Core是免费、跨平台的,是托管框架的开源实现。它支持 4 种类型的应用程序:控制台、ASP.NET Core、云和通用 Windows 平台(UWP)。Windows Forms和Windows Presentation Foundation(WPF)并不包含在.NET Core 中。

ASP.NET Core 

  Asp.net core其实就是仍然基于.net Full Framework(最低要求Framework 4.6.2)的项目, 但同时保留了.net core一些新的设置理念,比如Asp.net core默认使用Kestrel作为Http请求的监听器,而不是使用原来庞大的Https.sys。是以.NET Core 为基础构建的应用程序模型。

.NET Standard

  .NET Standard是一项实现 BCL 的规范。由于.NET 实现需要遵循这项规范,所以应用程序开发人员就不用担心每一种托管框架实现的 BCL 不同。托管框架的每一种实现都有一套自己的基类库。基类库(BCL)包含诸如异常处理、字符串、XML、I/O、网络和集合这样的类。

.NET Framework

  .NET Framework 用于构建桌面应用程序和运行在互联网信息服务器(IIS)上的 ASP.NET 应用程序。它是第一个托管框架。

Xamarin

  Xamarin 是一个用于构建 iOS、Android、macOS 和桌面应用程序的框架。

ASP.NET Core (.NET Core) and ASP.NET Core (.NET Framework)区别

ASP.NET Core (.NET Core) and ASP.NET Core (.NET Framework)区别

ASP.NET Core可以使用.NET Core和.NET Framework运行时,但运行在.NET Core与.NET Framework下ASP.NET Core 有哪些区别呢。本文就主要介绍一下它们之前的区别。

原文地址:ASP.NET Core (.NET Core) and ASP.NET Core (.NET Framework)区别

ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

1.Action、RenderAction加载办法的视图,履行Controller → Model → View的次序,然后把产生的页面带回到本来的View中再回传。而Partial、RenderPartial直接加载视图文件内容

2.Html.Partial可以直接供给用户控件名作为参数,而Html.Action须要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。

3.对于简单的没有任何逻辑的用户控件,推荐应用Html.Partial;对于须要设置一些Model的用户控件,推荐应用Html.Action。当然,有Model数据也是可以应用Html.Partial办法的,可以看办法的重载。

4.Html.Partial与Html.Action有啥区别呢?区别就是,Html.Partial只有一个视图,而Html.Action除了视图,还真的有个Action跟它对应,所以,Html.Action功能比Html.Partial要强。

 

如何调用这个Html.Partial

 //1、以视图名使用当前文件夹下的视图(如果没有找到,则搜索 Shared 文件夹)
@Html.Partial( "_test" //加载对应文件 /Views/Product/_test.cshtml
 
//2、依据应用根路径定位视图// 以 "/" 或 "~/" 开头的路径代表应用根路径
@Html.Partial( "~/Views/Product/_test.cshtml" )
@Html.Partial( "/Views/Product/_test2.cshtml" )
 
//3、加载其他目录的 视图文件
//注意:需要复制views中的web.config 到template目录,否则会提示  "/template/A.cshtml”处的视图必须派生自 WebViewPage 或 WebViewPage<TModel>"
@Html.Partial( "/template/A.cshtml" )

asp.net – Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction.任何人都可以描述不同之处

asp.net – Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction.任何人都可以描述不同之处

在ASP.NET MVC中,有什么区别:

Html.Partial and Html.RenderPartial
Html.Action and Html.RenderAction

解决方法

Html.Action调用控制器的动作,这意味着它实例化控制器实体,调用动作方法,构建模型并返回视图结果.

Html.Partial使用已创建的模型(或者可以在没有模型的情况下调用)来渲染指定的视图.

何时使用一个而不是另一个?如果您已有模型并且只想拥有可重复使用的视图,请选择Html.Partial.如果你看到某个部分值得拥有自己的模型和动作,那么使用Html.Action可能是有意义的.

这个问题在this article中有更详细的讨论,你在上面看到的基本上是它的摘录.

关于引用:Silverlight程序中动态设置WCF服务地址方法【附示例代码】http://www.aspxcs.net/HTML/2345222075.html#的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于.NET Core、.NET Standard 、ASP.NET Core 和 .NET Framework 有什么不同?、ASP.NET Core (.NET Core) and ASP.NET Core (.NET Framework)区别、ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction、asp.net – Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction.任何人都可以描述不同之处等相关内容,可以在本站寻找。

本文标签: