locked
我的web 方法返回一个list , 在客户端获取,但是报错,请问如何处理? RRS feed

  • 问题

  • 我的服务端是一个web方法,返回一个list给客户端

    [WebMethod]
            [XmlInclude(typeof(Image))]
            public List<Image> ImagesForUser(string sMac)
            {
                List<Image> oReturn = new List<Image>();
               
                string sUserId = ManageUser(sMac);           

                try
                {
                    SFCDB oDB = new SFCDB();
                    oDB.DBConnect("");

                    oDB.m_sCommandText = "SELECT times,src FROM socialimage where userid = '" + sUserId + "'";
                    oDB.GetData();
                   
                    while (oDB.m_rdr.Read())
                    {
                        Image oImage = new Image();

                        if (oDB.m_rdr["src"] != null)
                        {                       
                            oImage.sSrc = oDB.m_rdr["src"].ToString();                       
                        }

                        if (oDB.m_rdr["times"] != null)
                        {
                            oImage.sTimes = oDB.m_rdr["times"].ToString();
                        }

                        oReturn.Add(oImage);                   
                    }

                    oDB.DBDisConnect();

                    return oReturn;
                }
                catch (Exception ex)
                {
                    return oReturn;
                }        
            }

    客户端是一个winform的程序,这样调用web 方法,

    private void FormStatistics_Load(object sender, EventArgs e)
            {
                try
                {
                    com.steelsoftlab.WebServiceSociality o = new com.steelsoftlab.WebServiceSociality();

                    //string sPhotoName = o.SaveImage4(bytes, getLocalMac(), "");
                    object[] alImages = o.ImagesForUser(getLocalMac());
                    foreach (Image oImage in alImages)
                    {
                        string sSrc = oImage.sSrc;
                        string sTimes = oImage.sTimes;
                    }
                }
                catch (Exception ex)
                {
                    string sEx = ex.ToString();
                }
            }

    但是运行一直报错如下

    报错代码 object[] alImages = o.ImagesForUser(getLocalMac());

    报错内容

    System.InvalidOperationException: 客户端发现响应内容类型为“text/html; charset=utf-8”,但应为“text/xml”。
    请求失败。

    请问如何解决?

    谢谢。

    2014年3月17日 9:00

答案

  • 你好,

    一般情况下出现这种问题会有两种情况:

    1. 在调用服务的时候,服务端出现运行时异常或错误,这时服务端会将异常错误信息以html的格式返回到客户端。所以你需要确保你的服务端代码是否有错误,你可以通过以下方式进行验证:

       a.直接在浏览器中访问web服务,然后输入参数进行访问,查看是否会出现错误信息。

       b.使用一些工具,进行查看,比如你可以使用下面的工具:

        #Fiddler:
        http://fiddler2.com/get-fiddler

    2. 服务端相关配置被设置为以text/html的方式进行响应,不过我觉得这种情况的可能性比较小,你可以询问服务提供商(人员)。

        你可以试着在服务端的 global.asax 文件中添加以下代码:

    public void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Request.RequestContext.HttpContext.Reponse.ContentType.Equals("text/html; charset=UTF-8"))
    {
        Request.RequestContext.HttpContext.Reponse.ContentType = "text/xml";
    }
    }

    希望我的回答对你有所帮助。

    谢谢。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="HYPERLINK ">HERE</a> to participate the survey.


    2014年3月18日 2:14

全部回复

  • 你好,

    一般情况下出现这种问题会有两种情况:

    1. 在调用服务的时候,服务端出现运行时异常或错误,这时服务端会将异常错误信息以html的格式返回到客户端。所以你需要确保你的服务端代码是否有错误,你可以通过以下方式进行验证:

       a.直接在浏览器中访问web服务,然后输入参数进行访问,查看是否会出现错误信息。

       b.使用一些工具,进行查看,比如你可以使用下面的工具:

        #Fiddler:
        http://fiddler2.com/get-fiddler

    2. 服务端相关配置被设置为以text/html的方式进行响应,不过我觉得这种情况的可能性比较小,你可以询问服务提供商(人员)。

        你可以试着在服务端的 global.asax 文件中添加以下代码:

    public void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Request.RequestContext.HttpContext.Reponse.ContentType.Equals("text/html; charset=UTF-8"))
    {
        Request.RequestContext.HttpContext.Reponse.ContentType = "text/xml";
    }
    }

    希望我的回答对你有所帮助。

    谢谢。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="HYPERLINK ">HERE</a> to participate the survey.


    2014年3月18日 2:14
  • 服务端程序也是我写的,我没有在服务端创建global.asax 这个程序啊。

    请问global.asax 是系统生成的吗?

    2014年3月18日 6:01
  • 你好,

    是的,在你创建web项目的时候,系统会自动帮你生成一个global.asax文件,如果没有,你可以右击项目添加一个global.asax文件。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="HYPERLINK ">HERE</a> to participate the survey.

    2014年3月19日 5:33
  • 你好,

    是的,在你创建web项目的时候,系统会自动帮你生成一个global.asax文件,如果没有,你可以右击项目添加一个global.asax文件。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="HYPERLINK ">HERE</a> to participate the survey.

    我在global.asax中添加了,但是vs2010提示RequestContext找不到,请问如何解决?

    protected void Application_BeginRequest(object sender, EventArgs e)
            {
                if (Request.RequestContext.HttpContext.Reponse.ContentType.Equals("text/html; charset=UTF-8"))
                {
                    Request.RequestContext.HttpContext.Reponse.ContentType = "text/xml";
                   
                }

            }


    2014年3月23日 6:55
  • 你好,

    RequestContext类属于System.Web命名空间,请确认你是否引用该命名空间。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="HYPERLINK ">HERE</a> to participate the survey.

    2014年3月24日 2:39
  • 你好,

    RequestContext类属于System.Web命名空间,请确认你是否引用该命名空间。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="HYPERLINK ">HERE</a> to participate the survey.

    using System.Web;已经引用,但是提示是

    system.web.httprequest 不包含 

    RequestContext 的定义。

    2014年3月30日 7:38