Silverlight动态设置WCF服务Endpoint

去年12月收到一位朋友的邮件,咨询Silverlight使用WCF服务,应用部署后一直无法访问的问题,通过几次交流,才发现在他的项目中,全部使用静态URL作为WCF服务的Endpoint地址,后来修改为动态地址后,问题解决。本篇简单介绍如何创建动态WCF Endpoint。

Silverlight项目中通过WCF服务进行客户端与服务器端数据交互,其方法是在Silverlight客户端添加服务引用(Service Reference),Silverlight会在客户端项目中生成一个名为ServiceReference.ClientConfig的配置文件。该配置文件中包含有WCF服务的Endpoint URL地址,而该地址将指引Silverlight客户端服务请求到对应服务器端服务接口。默认情况下,客户端生成的Endpoint地址为localhost,当应用发布时,该地址将随着Web服务器的配置不同而改变。

作为默认设置,每次Web服务器配置切换,开发人员不得不手动修改WCF服务配置,Silverlight应用无法完全依赖于ServiceReference.ClientConfig配置。这样不仅增加了维护成本,而且为代码维护添加难度。 

首先在项目中添加WCF服务,Silverlight 默认生成ServiceReference.ClientConfig文件,从配置文件中可以看出,Endpoint都是指向本地。

 

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ProxyService" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
                <binding name="BasicHttpBinding_WidgetService" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost/WCFTest/Proxy.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ProxyService"
                contract="WCFTestProxy.ProxyService" name="BasicHttpBinding_ProxyService" />
            <endpoint address="http://localhost/WCFTest/Widget.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_WidgetService"
                contract="WCFTestWidgetService.WidgetService" name="BasicHttpBinding_WidgetService" />
        </client>
    </system.serviceModel>
</configuration>

 

为了实现动态设置Endpoint,下面将创建一个辅助类DynamicEndpointHelper,

public class DynamicEndpointHelper
{
    // BaseUrl是部署服务的Web服务器地址
    private const string BaseUrl = "http://localhost/WCFTest/";

    public static string ResolveEndpointUrl(string endpointUrl, string xapPath)
    {
        string baseUrl = xapPath.Substring(0, xapPath.IndexOf("ClientBin"));
        string relativeEndpointUrl = endpointUrl.Substring(BaseUrl.Length);
        string dynamicEndpointUrl = baseUrl + relativeEndpointUrl;
        return dynamicEndpointUrl;
    }
}

而在Silverlight客户端,可以通过后台代码实现动态设置Endpoint,

private WCFTestProxy.ProxyServiceClient GetProxyService()
{
    WCFTestProxy.ProxyServiceClient service = new WCFTestProxy.ProxyServiceClient();
    service.Endpoint.Address = new EndpointAddress(
        DynamicEndpointHelper.ResolveEndpointUrl(service.Endpoint.Address.Uri.ToString(),
        App.Current.Host.Source.ToString()));
    return service;
}

在创建完成代理客户端服务后,Endpoint地址将指向当前运行的Web地址。值得注意的是,该方法仅能支持应用与服务在相同域中,如果服务在不同的域中,必须进行跨域设置才能完成动态设置。

 

 

转载于:https://www.cnblogs.com/jv9/archive/2013/02/02/2889738.html

Silverlight+WCF象棋系统:新手可落地的B/S工程实践 Web应用开发的核心在于理解UI交互、业务逻辑与网络通讯的协同机制。从基础的客户端事件响应,到服务端状态管理,再到跨网络的数据序列化与同步,这些底层原理不随框架更迭而失效。Silverlight提供基于.NET的富客户端开发体验,WCF则以basicHttpBinding封装SOAP通信,使请求-响应过程透明可控,成为初学者掌握B/S架构演进逻辑的理想教学载体。通过实现棋盘渲染、走法规则引擎、房间状态同步等模块,学习者能直观建立‘代码改动→界面反馈→服务响应’的完整因果链,夯实工程直觉与调试能力。 阅读详情

相关推荐

Silverlight 4企业级开发实战:RIA时代的工程化启示

富互联网应用(RIA)是Web前端演进中的关键阶段,其核心在于突破浏览器沙箱限制,实现高性能、高安全、强交互的企业级体验。Silverlight作为典型RIA技术,依托.NET运行时、硬件加速渲染与WCF RIA Services等机制,解决了HTML5早期难以覆盖的金融交易、离线审批、DRM流媒体等硬核场景。它所代表的并非插件技术的成败,而是一种面向真实业务约束的工程思维——如声明式XAML开发、跨平台Portable Library抽象、基于变更集的离线同步、沙箱内建安全模型等。这些实践沉淀为现代前端架

unixboy 439

Silverlight异步调用WCF接口(非常简单易懂)

Silverlight异步调用WCF接口(非常简单易懂)

silverlight调用WCF服务的简单例子

此demo是对silverlight调用wcf服务的练习,实现了客户端与服务端进行字符串传递,使用http协议

sliverlight调用wcf服务详解

silverlight中调用wcf服务好好一阵的折腾啊。。。。终于搞定了,做个记录顺便分享一下wcf工程中需要注意的地方:1.新建一个crossdomain.xml文件,内容如下    节点 -->2.修改web.config文件内容  basicHttpBinding" contract="Demo.Wcf.IService1">  basicHttpBinding" con

柳生飘絮 2528

Mac自托管通用上下文层:从零搭建AI工作流的统一API

在本地AI工作流和自动化工具链中,上下文信息的分散常常是效率瓶颈。剪贴板内容、前台应用、窗口状态等系统数据各自孤立,难以被上层工具统一调用。为此,自托管通用上下文层成为一种可行方案:它在Mac上充当系统数据源与上层应用之间的中间层,通过统一采集、存储和API接口,将碎片化状态汇聚为可检索的上下文数据。核心设计围绕数据模型、采集策略与查询接口展开,常以FastAPI提供REST API,并以SQLite实现本地持久化,兼顾性能与隐私可控。这种模式的价值在于解耦——上层AI工具、自动化脚本或效率应用只需调用同一

weixin_33842304的博客 363

5步教你在Silverlight中使用WCF服务

5步教你在Silverlight中使用WCF服务

spring的专栏 2843

●创建silverlight+wcf

创建WCF服务应用程序 创建silverlight应用程序 创建其他 WCF服务应用程序中添加WCF服务 引用类库 添加WCF服务 .cs文件中 using System; using System.Collections.Generic; using System.Linq; using System...

weixin_30443747的博客 189

silverlight+Wcf实现登录

silverlight+Wcf实现登录silverlight+Wcf实现登录

silverlight通过wcf处理word问题

关于在silverlight使用word的时候遇到的问题,例如无法读取等的解决方案

silverlight调用wcf服务跨域解决方案 demo

1.文件夹SilverlightFrmWcf : winform程序托管wcf服务Silverlight调用wcf 跨域解决方案 (1)解决方案frmWcfService:winform程序托管wcf服务 (2)Silverlight项目调用wcf解决方案 2.文件夹SilverlightWCFDemo: iis托管wcf服务Silverlight调用wcf 跨域解决方案 有问题qq联系631783964

动态配置Silverlight调用WCF

 去年12月收到一位朋友的邮件,咨询Silverlight使用WCF服务,应用部署后一直无法访问的问题,通过几次交流,才发现在他的项目中,全部使用静态URL作为WCF服务Endpoint地址,后来修改为动态地址后,问题解决。本篇简单介绍如何创建动态WCF EndpointSilverlight项目中通过WCF服务进行客户端与服务器端数据交互,其方法是在Silverlight

niewq的专栏 754

Silverlight WCF 初尝小结

创建Silverlight应用程序项目的时候,VS会问你 是调试的时候生成测试页来承载Silverlight还是自动创建个ASP.NET项目来承载Silverlight, 有什么区别呢 ?如果你只是做Silverlight的界面和客户端的交互效果,用单独的测试页来承载就可以了,这样方便调试,按个CTRL+F5就OK,但是如果你要用到WCF,或者通过ASP.NET做些动态的事情,那么就用ASP.NE...

weixin_33814685的博客 85
上一篇: 文件的命令02
下一篇: Nginx开发手册
weixin_34321977
博客等级 码龄10年 5424粉丝 148原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值