当前位置:  开发笔记 > 编程语言 > 正文

在Silverlight中使用Web客户端

如何解决《在Silverlight中使用Web客户端》经验,为你挑选了1个好方法。

我有一段时间从Silverlight内部调用RESTful服务.我遇到这个错误:

{System.Security.SecurityException ---> System.Security.SecurityException: Security error.
   at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.BrowserHttpWebRequest.<>c__DisplayClass5.b__4(Object sendState)
   at System.Net.AsyncHelper.<>c__DisplayClass2.b__0(Object sendState)
   --- End of inner exception stack trace ---
   at System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
   at System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
   at System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult result)}

使用webclient时,这似乎是一个流行的错误.我已经实现了clientaccesspolicy.xml

 
  
    
      
        
            
        
        
           
        
     
   
  

我已经看到了提琴手的银色光线,它确实向网站提出了请求,并确实获得了200状态.

public void login(string userName, string password)
        {
            WebClient client = new WebClient();
            Uri uri = new Uri(serverURI + "/clientaccesspolicy.xml");
            client.OpenReadCompleted += new OpenReadCompletedEventHandler(login_Complete);
            client.OpenReadAsync(uri);
        }

        private void login_Complete(object sender, OpenReadCompletedEventArgs e)
        {
            byte[] buffer = new byte[e.Result.Length]; //crashes here with exception
            ...
        }

我或多或少都没有想法.谁知道我做错了什么?直接从文件运行silverlight是否存在问题:// uri?

更新: 我删除了clientaccesspolicy.xml文件并保留了crossdomain.xml文件并且bingo一切正常.这让我相信错误发生在clientaccesspolicy文件中,但我直接从microsoft复制了它.是什么赋予了?



1> Adam Berent..:

我花了3个小时调查这个问题.跨域访问策略和客户端访问策略文件对我来说是一个死胡同.什么都行不通.最后,我遇到了一位微软员工在Silverlight.net论坛上发帖,帮助我解决了这个问题.

答案,至少在我的例子中是Visual Studio在创建新的Silverlight应用程序时生成的测试网页.

基本上,当您启动Silverlight项目时,您会获得两个选项.第一个选项将在您运行应用程序时动态生成html页面.第二个选项将创建一个单独的ASP.NET项目,该项目将托管您的Silverlight应用程序.如果您选择第一个选项(动态测试页面),您将无法执行任何跨域请求,即使您的项目位于同一个框中,它也会以某种方式将此视为跨域调用并失败(我不知道为什么)

创建另一个Silverlight项目,选择第二个选项,然后移动您的XAML文件.这应该可以解决您的问题.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有