SilverLight1.1 中,使用 SoaphttpClientProtocol 调用WS有个限制,就是Cross domain calls are not supported by BrowserHttpWebRequest,这是  SilverLight 的安全机制的一部分,证据如下:

internal BrowserHttpWebRequest(Uri uri, bool inBrowser, bool enableCrossDomainCalls) : base(uri)
    {
        if (uri == null)
        {
            throw new ArgumentNullException("uri");
        }
        if (!uri.IsAbsoluteUri)
        {
            uri = new Uri(HtmlPage.DocumentUri, uri);
        }
        else if (!enableCrossDomainCalls && IsCrossDomainRequest(uri))
        {
            throw new InvalidOperationException("Cross domain calls are not supported by BrowserHttpWebRequest.");
        }
        this._uri = uri;
        this._outOfBrowser = !inBrowser || (enableCrossDomainCalls && IsCrossDomainRequest(uri));
    }
  

 internal static bool IsCrossDomainRequest(Uri uri)
    {
        string components = uri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
        string str2 = HtmlPage.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
        if (components.Equals(str2, StringComparison.OrdinalIgnoreCase))
        {
            return false;
        }
        return true;
    }

但对于需要调用其他Site 的WS的需求似乎并不过份,那我们就想其他办法绕过去吧。

我们知道在JavaScript中调用WS是没有这限制的(但还是有验证的),通过JavaScript 实际是JavaScript +XMLhttpRequest +JSon+WS+ JavaScriptSerializer+Silveright的技术组合,我有点怕,但应该能实现。

HttpHandler 也许是个不错的主意,在服务端做重新定向,起码应该能解决调用自己Web site 的WS 的问题 (就是在自己WebSite上做一个HttpHandler ,用来代理WebserService 的调用)。马上试验,又发现一个限制,是HttpHandler的限制,其实也是ASP.net 的限制,就是服务端的重定向方法 Server.Execute 和Server.Transfer 方法只支持重定向到 ASP.net page。明证在 HttpServerUtility 类中

.
else if (!(handler is Page))
{
error = new HttpException(0x194, string.Empty);
}

文档里也有说明The page transferred to should be another .aspx page. For instance, a transfer to an .asp or .asmx page is not valid.

咣当倒地。

但改进第二种方式, HttpHandler + JavaScriptSerializer + WS应该是可行,而且效率肯定能比第一种高。本人浅薄第认为,只要能不涉及JavaScript就远离它。明天再试。

转载于:https://www.cnblogs.com/youhok/archive/2008/02/18/1072629.html

SilverLight 一日两次碰壁相关推荐

  1. Silverlight入门:第三部分 - 数据访问

    现在我们已经有了一个基础布局,同时也在上面放了一些控件,接下来让我 们开始获取数据.因为我们想要搜索Twitter上的内容,所以我们需要充分使用 他们提供的Web服务API.在继续之前,我要先说明在本 ...

  2. 关于微软Silverlight,你应该知道的10件事

    对于任何成长中的企业来说,设计一个合适的网站是一件非常重要的事情,但是如何让你的网站具有富互联网应用程序(Rich Internet Applications,RIA)的体验却不是那么简单.为了在这方 ...

  3. Flex/Silverlight的技术比较转

    基于个人的使用经验,我从语言.框架.开发环境和运行环境四个方面对Flex和Silverlight这两门技术做一个比较,自己认为这个比较还是比较全面的.(这样的比较有意义吗?个人意见,只要别把自己当成宗 ...

  4. Silverlight 全屏模式

    Silverlight 有两种模式:第一种为嵌入式,第二种为全屏模式. 全屏模式需要引用其页面宿主程序: 即 Application.Current.Host.Content.IsFullScreen ...

  5. Flex/Silverlight的技术比较

    Flex/Silverlight的技术比较 别人博客上看见的,一文下去,引起口水大战,其实仁者见仁,智者见智,每种语言都不可能是完善的,扬长避短才是王道. 基于个人的使用经验,我从语言.框架.开发环境 ...

  6. WPF对决Silverlight:为项目选择最佳技术

    在何时使用WPF,何时使用Silverlight的问题上,很多人备感困惑.为项目选择正确的技术取决于应用程序的需求,以及WPF和Silverlight能力的不同之处. Silverlight最初称为W ...

  7. [Silverlight]奇技银巧系列-5 捕获路由事件

    Silverlight奇技银巧系列: 所有该系列中的文章只为介绍一些Silverlight中或隐藏在Silverlight .NET framework鲜为人知的知识和技巧.这些文章并非教程,也是不是 ...

  8. 微软Silverlight,你应该知道的10件事

    笔者使用Silverlight的时间比较长,一直在研究这个微软号称"Flash杀手"的工具.根据几个月的第一手体验,对它的技术方面的精华进行了总结. 随着Siverlight公众版 ...

  9. Silverlight 异步单元测试

    Silverlight 中的很多操作都是异步的,很多情况下要求单元测试也是异步的,但是介绍异步单元测试的文档很少.通过对 Silverlight Toolkit 中的 Microsoft.Silver ...

最新文章

  1. RHCSA 解析-01
  2. 动态内存检测工具Valgrind
  3. 点到点链路上的ospf
  4. Python学习笔记(二)——HelloWorld
  5. 使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)
  6. 如何让Filddler抓包时忽略某些主机名
  7. 辨异 —— 不同的编程语言(编译型语言、解释型语言、动态语言、静态语言)...
  8. MapReduce 之shuffle过程
  9. NVIDIA背书-Kaldi是目前最受欢迎的开源语音识别框架
  10. java自动扫描不好使_Spring 自动扫描 不支持jar包 component-scan
  11. perl语言入门学习
  12. 网络框架分析-全是套路
  13. java五险一金去从工资扣吗,五险一金需要自己交钱吗?是从工资里扣除还是......
  14. 阿里内核月报2014年7月-8月
  15. [work] Python - 字典(dict)删除元素
  16. 交响曲、协奏曲、奏鸣曲
  17. Python爬取皮皮虾视频
  18. Python如何快速爬取淘宝MM呢?教你一招
  19. 【机器学习课程】第一章机器学习概述 2.机器学习
  20. VIPL Lab 9篇ACM MM 2019和IEEE TIP 论文精解

热门文章

  1. 简单介绍Tomcat中catalina.out 和 catalina.log的区别和用途
  2. MySQL的共享锁和独占锁
  3. 如何在FreeBSD中安装Nginx,MySQL,PHP(FEMP)
  4. java合并两个doc文件,java实现合并2个文件中的内容到新文件中
  5. 易语言组合框连接mysql_用mysql填充的多动态组合框
  6. 7/15 我的第一篇博客-写给自己
  7. python中使用socket编程实现图片或者其他文件的传输
  8. 关于学习Python之后的一点总结(1->符号优先级->for->range())
  9. apache ant 安装_SAP Hybris使用recipe进行安装时,是如何执行ant命令的?
  10. java什么时候用list_Java快问快答:用 ArrayList 还是 LinkedList?