开发WCF/Silverlight须知
转自:http://www.agiledon.com/post/2009/03/WCF-Silverlight-Lessons.html
绑定的选择
毫无疑问,我们应该选择BasicHttpBinding,这也是Silverlight仅仅支持的一种绑定。
WCF异常的处理
Silverlight无法获取WCF异常(例如:FaultException)。如果WCF服务抛出WCF异常,在客户端应用程序只能够获得 HTTP 404错误。无疑,这会干扰调用者对异常的捕捉,同时也无法获知真正的异常信息。一种好的做法是在服务方法中定义一个out参数,在该参数中包含HTTP Status以及异常信息。可以定义一个返回信息的数据契约,例如:
public class CallResult
{
public CallResult()
{
StatusCode = 0;
StatusMessage = "OK";
}
[DataMember]
public int StatusCode
{get; set;}
[DataMember]
public string StatusMessage
{get; set;}
[DataMember]
public string ExceptionDetails
{get; set;}
}
编写服务方法时,可以采用如下方式:
{
status = new CallResult();
if (string.IsNullOrEmpty(from) ||
string.IsNullOrEmpty(to))
{
status.StatusCode = 2;
status.StatusMessage = "Invalid or empty curreny symbols specified";
return 0;
}
try
{
string config = ConfigurationManager.AppSettings["htmlparserconfig"];
var converter = new CurrencyConverter(config);
return converter.Convert(from, to);
}
catch (Exception ex)
{
status.StatusCode = 9;
status.StatusMessage = "Failed to get currency conversion rate";
status.ExceptionDetails = ex.Message;
//TODO: Log this message.
}
return 0;
}
WCF服务的部署
在将WCF服务部署在Web服务器上时,最好在配置文件中为WCF服务添加一个基地址。如果未来需要修改WCF服务的部署地址,仅仅需要修改配置文件的基地址即可,其余位置不需要做任何修改。
<baseAddresses>
<add baseAddress="http://www.myhostserver.com/MyWCFServices/"/>
</baseAddresses>
</host>
此外,至关重要的一点是要让服务跨域边界可用。Silverlight 在默认情况下只允许源站点通信。若要允许 Silverlight 控件访问其他域上的服务,该服务必须明确选择允许跨域访问。通过选择,服务声明它公开的操作可以由 Silverlight 控件安全地调用,而不会对该服务存储的数据造成具有潜在危害的结果。Silverlight 2.0 支持两种不同的机制供服务选择跨域访问:
(1)在承载服务的域的根目录中放置一个 clientaccesspolicy.xml 文件,以配置服务允许跨域访问。
(2)在承载服务的域的根目录中放置一个有效的 crossdomain.xml 文件。该文件必须将整个域标记为 public。
例如,创建如下的clientaccesspolicy.xml文件:
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
如果只允许从其他域中的一个进行访问(例如 http://agiledon.com),clientaccesspolicy.xml 应当包含以下配置:
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="http://agiledon.com"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
然后再将该文件保存到托管该服务的域的根目录中。例如,如果该服务在 http://agiledon.com 上承载,则文件必须位于 http://agiledon.com/clientaccesspolicy.xml。
如果进行如上的配置,在Silverlight跨域访问时,就会出现一个安全错误。
转载于:https://www.cnblogs.com/drc606/archive/2009/11/23/1609084.html
开发WCF/Silverlight须知相关推荐
- Silverlight C# 游戏开发:Silverlight开发环境
Silverlight C# 游戏开发:Silverlight开发环境 所谓工欲善其事必先利其器,没有好的工具也没有办法做事,我以前曾经想学习C++以外的程序语言,当时有java和C#来选择,当时考虑 ...
- WCF+Silverlight部署本机备忘
wcf+silverlight在部署到IIS上时的步骤 1.web程序中添加wcf服务 2.sl程序中引用该服务 private void button1_Click(object sender, R ...
- 网页最少要有一个html标签,PHP_网页开发人员必须知道的10个不常用HTML标签, 网页开发人员常常希望能 - phpStudy...
网页开发人员必须知道的10个不常用HTML标签 网页开发人员常常希望能够了解并掌握多种语言,结果是,学习一门语言的所有内容是棘手的,但是却很容易发现你并没有完全利用那些比较特殊却很有用的标签. 不幸的 ...
- 学习 WCF (3)--开发WCF客户程序
前篇Learn WCF (2)--开发WCF服务介绍了开发服务程序,这篇开发一个客户程序,主要有三种方案: 添加一个Web引用 使用svcutil.exe工具 编程方案 1.添加一个Web引用 这个和 ...
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):目录
本系列教程的示例代码下载(感谢 银光中国 提供资源分流): 第一部分源码:WPFGameTutorial_PartI(1-20节) 第二部分源码:WPFGameTutorial_PartII(21-2 ...
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二)让物体动起来②
第二种方法,CompositionTarget动画,官方描述为:CompositionTarget对象可以根据每个帧回调来创建自定义动画.其实直接点,CompositionTarget创建的动画是基于 ...
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(一)让物体动起来①
序:自从QXGame(WPF GAME ENGINE)游戏引擎公布以来,受到很多朋友的热切关注,于是乎有了写教程的想法.那么从今天开始,我将带领大家一步一步的学会如何使用纯C#开发WPF/Silver ...
- 基于WP7开发的Silverlight常用控件详解
Silverlight是一个跨浏览器.跨客户平台的技术,能够设计.开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程序. 针对Windows P ...
- WCF+Silverlight一个简单的RSS阅读器(二)
嘿嘿,坚持不懈,继续我的Silverlight之旅,创建了WCF服务,我们需要的是通过Silverlight能够应用这个服务, 比起2005,2008的服务引用做的好多了,上图: 通过右边的Disco ...
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十五)完美捕捉精灵之神器 -- HitTest...
怪物们都出现了,如何选中自己心仪的怪是主角目前首要做的事. 为了进行鼠标状态区别,我首先对鼠标变化规则进行约束:当鼠标在屏幕上空旷地图区域移动时,鼠标光标形态表现为默认光标 (0号光标图片),当鼠标经 ...
最新文章
- 解决Lync Server 2013无法共享演示PPT
- 雅特力415开发资料_雅特力在车用电子领域 AT32 MCU应用于ADAS环视系统
- python-Django收集主机信息
- 【爬蟲】爬蟲概述、分類及運行原理
- mysql数据库在查询的时候不能使用字段别名,字段别名只在显示的时候显示出来
- Medoo 开源项目发布,超轻量级的PHP SQL数据库框架
- SQL SERVER 数据导出JSON
- 如何对抗硬件断点--- 调试寄存器
- Mybatis(8)DAO实现类的使用方式
- 安装cocoaPod 的问题
- C#调用Microsoft.DirectX.DirectSound问题记录及解决
- 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
- R︱Yandex的梯度提升CatBoost 算法(官方述:超越XGBoost/lightGBM/h2o)
- Codeforces 396C
- 收藏| 一些可供参考的游戏出海技术架构与经验总结
- c语言结构体定义常量,C语言结构体
- 桐桐的数学难题(质因数分解)
- python pygame 游戏实践: 俄罗斯方块(Tetris Game)第一步
- 《The C Programming Language》答案(第一章)
- python代码圣诞树你还没有嘛?所有画法都在这篇文章里拉~
热门文章
- Weka数据挖掘平台
- ORA-12170: TNS: 连接超时 问题
- linux面试题(填空部分)
- java用户注册模块_用户注册登录模块设计方案报告.docx
- do...while(); 语句在宏定义中的应用。
- dubbo服务压力测试
- 设计模式---观察者模式(C++)
- [渝粤教育] 西南科技大学 电子技术基础 在线考试复习资料
- [渝粤教育] 西南科技大学 公共事业管理概论 在线考试复习资料
- 【渝粤教育】广东开放大学 学前儿童保育学 形成性考核 (40)