一起谈.NET技术,Silverlight3动态访问wcf

简介:   网络上设置Silverlight动态访问WCF服务,大多是抛开ServiceReferences.ClientConfig文件,完全以代码方式实现对WCF的动态访问。但这种做法存在实现复杂和局限性。

  网络上设置Silverlight动态访问WCF服务,大多是抛开ServiceReferences.ClientConfig文件,完全以代码方式实现对WCF的动态访问。但这种做法存在实现复杂和局限性。在实际使用的过程中,出于安全等原因,很多时候需要通过自定义绑定,设置很多内容。通过VS中的向导生成Silverlight对WCF的访问,能够自动识别这些内容,并自动生成ServiceReferences.ClientConfig文件,简单地实现对服务的访问,但手动通过代码实现这些绑定,显然难度比VS向导方式大了很多,而且一旦服务的绑定等发生变化,Silverlight端代码的修改也非常麻烦。
  我们知道,WCF服务是通过ABC三种要素进行设置的,VS向导能自动生成ABC三种要素。程序部署到服务器上,唯一变化的就是A——地址。因此,通过一定的方式,依托自动生成的配置文件,只是动态地修改A,显然是最简单的方式。
  程序在开发环境和部署到服务器上时,主要会面临两种情况:
  1、Silverlight始终以一个固定的服务器地址访问WCF服务,例如,其中一个服务的地址是http://myServices.com/MyService.svc。
  2、服务器提供公网和局域网两种访问方式,WCF服务和承载Silverlight的Web程序在同一个站点上,两者可能在同一个Web程序中,也可能是两个不同的程序。例如,在局域网中,分别是http://192.168.1.4/myServices/myService.svc和http://192.168.1.4/webUI/aaa.aspx。在公网中,又分别是http://Mytest.com/myServices/myService.svc和http://Mytest.com/webUI/aaa.aspx。

  显然,两种情况需要不同的处理方式。为了同时满足两种情况,可以使用下面的方式进行处理。

  1、Web程序端
  对于第一种情况,由于Silverlight的配置文件都打包在xap文件中,因此可以通过承载Silverlight的Web程序为其传递服务地址,这个地址最好的存放处就是Web程序的web.config文件。例如在web.config的appSettings节中增加一个键值对<add key="WcfServiceAddress" value="http://myServices.com"/>。然后在承载Silverlighgt的aspx页面文件中调用Silverlight处,增加下面的内容:

 
 
< param name ="InitParams" value ='WcfServiceAddress=<%= System.Configuration.ConfigurationManager.AppSettings["WcfServiceAddress"] % > ' />

  对于第二种情况,则不需要在web.config中增加内容。

  2、Silverlight端
  1)在App.Xaml.cs的Application_Startup方法中,增加下面的代码:

 
 
// 读取Web程序传递的WCF服务地址

var slServicePath
= e.InitParams[ " WcfServiceAddress " ];
// 如果没有值,说明为第二种情况,则读取承载的Web程序的地址信息,以适应公网和局域网两种情况

if ( string .IsNullOrEmpty(slServicePath))
{
var tmp
= HtmlPage.Document.DocumentUri;
WcfServiceAddress
= string .Format( " {0}://{1}:{2} " , tmp.Scheme,tmp.Host,tmp.Port);
}
// 将读取到的WCF地址保存到资源中。
Application.Current.Resources.Add( " WcfServiceAddress " ,slServicePath);

  2)建立一个公用的Utility类,并在其中增加一个方法,代码如下:

 
 
public static EndpointAddress ProcessServiceAddress(EndpointAddress originalEndpointAddress)
{
var newUri
= Application.Current.Resources[ " SlServicePath " ] + originalEndpointAddress.Uri.AbsolutePath;
return new EndpointAddress(newUri);
}

  3)使用WCF服务:

 
 
MyServiceClient myService = new MyServiceClient();
myService .Endpoint.Address
= Utility.ProcessServiceAddress(myService.Endpoint.Address);

  //调用服务方法的代码……
  这样,就能轻松地实现Silverlight对WCF的动态访问。即使WCF服务的绑定等内容发生变化,也只需要简单地通过VS的向导更新服务引用即可,代码不需要任何修改。

目录
相关文章
|
3月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
3月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
4月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
65 5
|
4月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
62 4
|
4月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
65 3
|
4月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
57 3
|
4月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
96 3
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
87 0
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
147 0

热门文章

最新文章

相关实验场景

更多