none
silverlight中调用cgi服务的问题 RRS feed

  • 问题

  • 2台机器一台机器上部署了一个cgi服务

    另外一台是sliverlight程序。 现在在silverlight中调用cgi服务获取一个xml文件总是报安全性错误。

    不知道是为什么?

    那为什么我的c#编写的就没问题。用silverlight就报错呢。只是一个同步的一个异步的。

    入下列代码

    C#   
    try   
                {   
                    string url = "http://192.168.1.52:8080/cgi-bin/test.pl";   
                    WebClient client = new WebClient();   
                    Stream data = client.OpenRead(url);   
                    //StreamReader reader = new StreamReader(data, Encoding.GetEncoding("GB2312"));   
     
                    StreamReader reader = new StreamReader(data, Encoding.GetEncoding("GB2312"));   
                    string strTemp = "";   
                    strTemp = reader.ReadToEnd();   
                }   
                catch (WebException exp)   
                {   
                    MessageBox.Show(exp.Message, "Exception");   
                }   
     
    silverlgiht   
     
    WebClient webclient = new WebClient();   
     
                webclient.OpenReadAsync(new Uri("http://192.168.1.52:8080/cgi-bin/test.pl"));   
                webclient.OpenReadCompleted += new OpenReadCompletedEventHandler(webclient_OpenReadCompleted);   
     
        void webclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)   
            {   
                if (e.Error != null)   
                {   
                    // 发生错误的话,则打印出来   
                    MessageBox.Show(e.Error.ToString());   
                    return;   
                }   
     
                XElement xml = XElement.Load(System.Xml.XmlReader.Create(e.Result));   
            }   
     
     
     
    {System.Security.SecurityException: 安全性错误。   
       位于 System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)   
       位于 System.Net.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)   
       位于 System.Net.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)}   
     
    2009年3月3日 10:30

答案

  • 跨域访问有一点要注意,就是在你的网站做了映射的时候,比如你的网站同时解析了 www.xxx.com 跟 xxx.com 两个域名时会出现问题,解决办法之进行 xxx.com的映射 然后进行 *.xxx.com 的泛映射 再将 www.xxx.com泛映射成为 xxx.com .
    由于安全因素,两台机器测试,不要用ip地址连接,可以修改 %windir%\system32\drivers\etc\hosts 文件,还修正本机域名解析

    clientaccesspolicy.xml
    <?xml version="1.0" encoding="utf-8"?>  
    <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> 
    • 已标记为答案 worldman 2009年3月4日 15:34
    2009年3月4日 4:37
    版主

全部回复

  • silverlight需要配置cross domain。


    请参考:
    http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx

    Facing problems, think first, then search, finally ask.
    2009年3月3日 12:06
    版主
  •  今天正好看了这篇文章.
    大概意思就是由于安全性之类的东西考虑
    需要在提供服务的web服务器下配置一个这样的文件.才允许任何跨域调用.
    <?xml version="1.0" encoding="utf-8"?>
    <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>

    我在我apche服务器上加上了之后还是不行哦.! 不得以发帖求助了.  

    是不是还有什么其他地方弄错了哦. 看了孟大哥的blog也就是说加一个这样的文件

    I'm not Facing problems, think first, then search, finally ask.
    2009年3月3日 16:08
  •  你是加到根目录下了吗?
    2009年3月3日 20:05
  • 跨域访问有一点要注意,就是在你的网站做了映射的时候,比如你的网站同时解析了 www.xxx.com 跟 xxx.com 两个域名时会出现问题,解决办法之进行 xxx.com的映射 然后进行 *.xxx.com 的泛映射 再将 www.xxx.com泛映射成为 xxx.com .
    由于安全因素,两台机器测试,不要用ip地址连接,可以修改 %windir%\system32\drivers\etc\hosts 文件,还修正本机域名解析

    clientaccesspolicy.xml
    <?xml version="1.0" encoding="utf-8"?>  
    <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> 
    • 已标记为答案 worldman 2009年3月4日 15:34
    2009年3月4日 4:37
    版主
  • 谢谢楼上的关注和答复.问题已经解决了.!
    由于不是第一次使用apche.服务器.所以在放置跨域文件的位置时出了点问题.


    一定要在放在发布网站的跟目录下.哦..!
    • 已标记为答案 worldman 2009年3月4日 15:34
    • 取消答案标记 worldman 2009年3月4日 15:35
    2009年3月4日 15:34