none
我的Silverlight 客户端 取得不到 服务器端StatCompositor.asmx返回的List<T> RRS feed

  • 问题

  • 我的Silverlight 客户端 取得不到 服务器端StatCompositor.asmx返回的List<T>
    服务器代码
    List<StatArticlePicData> listArticle = new List<StatArticlePicData>();
    foreach (DataRow dr in ds.Tables[0].Rows)
    listData.strUser = dr["author"].ToString();
    listArticle.Add(listData);
    return listArticle ;
    客户端代码
            public void selectListButt_Click(object sender, RoutedEventArgs e)
            {

                //创建webservice对象
                ServiceStatCompositor.StatCompositorSoapClient userClient = new Dfzx.Stat.Compositor.ServiceStatCompositor.StatCompositorSoapClient();

                userClient.CreatrStatCompositorPicAsync();
                userClient.CreatrStatCompositorPicCompleted += new EventHandler<Dfzx.Stat.Compositor.ServiceStatCompositor.CreatrStatCompositorPicCompletedEventArgs>(userMgrSoapClient_RetrieveUsersCompleted);
    }
            void userMgrSoapClient_RetrieveUsersCompleted(object sender, Dfzx.Stat.Compositor.ServiceStatCompositor.CreatrStatCompositorPicCompletedEventArgs e)
            {

                ObservableCollection<Dfzx.Stat.Compositor.ServiceStatCompositor.StatArticlePicData> lst = new ObservableCollection<Dfzx.Stat.Compositor.ServiceStatCompositor.StatArticlePicData>();
                    lst = e.Result;
            }


    结果e.Result就是null,我在本地运行没问题能取得数据 但是发布到服务器后就取得不到数据


    2009年5月14日 10:57

答案

  • 取得http的内容参见下面方法

            /// <summary>
            /// 取得网址内容
            /// </summary>
            /// <param name="requestUri">网址</param>
            /// <param name="strCharset">编码</param>
            /// <returns></returns>
            public string GetUrlContent(string requestUri, string strCharset)
            {
                string strcontent = "";
                try
                {
                    WebRequest wrquest = WebRequest.Create(requestUri);
                    WebResponse wrponse = wrquest.GetResponse();
                    StreamReader sr = new StreamReader(wrponse.GetResponseStream(), System.Text.Encoding.GetEncoding(strCharset));
                    strcontent = sr.ReadToEnd();                
                }
                catch
                { }
                return strcontent;
            }
    2009年5月15日 15:38
    版主

全部回复

  • 应该是跨域权限问题,给wcf的web根目录添加

    clientaccesspolicy.xml

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
        <cross-domain-access>
            <policy>
                <allow-from>
                    <domain uri="*"/>
                </allow-from>
                <grant-to>
                    <resource path="/" include-subpaths="true"/>
                </grant-to>
            </policy>
        </cross-domain-access>
    </access-policy>
    
    跨域访问策略权限再试试
    2009年5月14日 11:06
    版主
  • 我用的是webservice  也用添加这个吗?
    2009年5月14日 11:11
  • 补充,发布完访问策略要放在 http://xxx.com/clientaccesspolicy.xml 下可以访问到,wcf所在域名的根目录下
    2009年5月14日 11:13
    版主
  • 我放了 还是不好用
    2009年5月14日 11:41
  • 还有就是我放在LIST里面的数据返回正常,但是放在GRADE里面的数据就没有返回来,书不是字符串过长的问题?

    2009年5月14日 11:42
  • 书目GRADE?

    2009年5月14日 12:14
    版主
  • 写错了 返回字符串少的 都回来了 ,字符串多的都没回来,我返回的是xml形式,这个跟字符串的长短有关吗
    2009年5月14日 12:18
  • 有关,string有大小限制,可以返回Stream最好不要直接返回一个大长串的string
    2009年5月14日 12:32
    版主
  • 那么那里可以设置返回的长度呢
    2009年5月14日 12:33
  • 返回Stream就可以了,客户端处理这个Stream,用XmlReader读就行了,而且这样也可以很有效的减小服务器的压力
    2009年5月14日 12:42
    版主
  • String大小是默认的,好像是2G。

    2009年5月14日 12:46
    版主
  • 写错了 返回字符串少的 都回来了 ,字符串多的都没回来,我返回的是xml形式,这个跟字符串的长短有关吗

    检查wcf方法是否有错误
    http://social.microsoft.com/Forums/zh-CN/silverlightzhchs/thread/6a2a27ec-ebda-4795-a014-bf9042e6cc70 这里楼主的掉返回方法不对,不要用
    2009年5月14日 23:59
    版主
  • 我把调用方法修改 返回一个固定值的string 结果出现下面的错误

    throw new Error("Unhandled Error in Silverlight 2 Application
    操作过程中出现异常,结果无效。有关异常的详细信息,请查看 InnerException。 
     位于 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()\n  
    位于 Dfzx.Stat.Compositor.ServiceStatCompositor.CreatrStatCompositorPicCompletedEventArgs.get_Result()\n  
    位于 Dfzx.Stat.Compositor.StatCompositor.userMgrSoapClient_RetrieveUsersCompleted(Object sender, CreatrStatCompositorPicCompletedEventArgs e)\n  
    位于 Dfzx.Stat.Compositor.ServiceStatCompositor.StatCompositorSoapClient.OnCreatrStatCompositorPicCompleted(Object state)");
    2009年5月15日 2:16
  • wcf程序问题,或没添加跨域策略,或没使用HttpBasic方式调用WCF
    2009年5月15日 2:25
    版主
  • 你好 跨域策略是clientaccesspolicy.xml 文件添加到 发布的根目录下吧。 另外HttpBasic方式调用WCF 请详细说下 谢谢
    2009年5月15日 2:28
  • 不明白的是 为什么发布后 我在数据库中查询的少量数据都能返回,查询的一个结果集就返回不了
    2009年5月15日 2:33
  • 您有联系方式或者电话吗 给我留一个可否
    2009年5月15日 2:38
  • 取得http的内容参见下面方法

            /// <summary>
            /// 取得网址内容
            /// </summary>
            /// <param name="requestUri">网址</param>
            /// <param name="strCharset">编码</param>
            /// <returns></returns>
            public string GetUrlContent(string requestUri, string strCharset)
            {
                string strcontent = "";
                try
                {
                    WebRequest wrquest = WebRequest.Create(requestUri);
                    WebResponse wrponse = wrquest.GetResponse();
                    StreamReader sr = new StreamReader(wrponse.GetResponseStream(), System.Text.Encoding.GetEncoding(strCharset));
                    strcontent = sr.ReadToEnd();                
                }
                catch
                { }
                return strcontent;
            }
    2009年5月15日 15:38
    版主