none
WebServices在服务端捕获客户端访问时造成的异常 RRS feed

  • 问题

  • 有这么一个方法

        [WebMethod]
        public List<User> getUsers(string name, int age, DateTime StartTime, DateTime EndTime)
        {
            ...
        }
    
     当客户端访问时,如果不传入参数的话则会报出异常,异常信息为
    System.ArgumentException: 无法将 转换为 System.Int32。
    参数名: type ---> System.FormatException: 输入字符串的格式不正确。
      在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
      在 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
      在 System.Int32.Parse(String s, NumberStyles style, IFormatProvider provider)
      在 System.Convert.ToInt32(String value, IFormatProvider provider)
      在 System.String.System.IConvertible.ToInt32(IFormatProvider provider)
      在 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
      在 System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
      --- 内部异常堆栈跟踪的结尾 ---
      在 System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
      在 System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
      在 System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
      在 System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
      在 System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
    请问,我如何能在服务端捕获到该异常?

    2011年3月25日 2:29

答案

  • 不是非常清楚你的意思:如果你的服务端方法已经暴露成接口,并且已经发布在网上而且客户端已经添加了这个WebService,您完全可以这样做——

    try

    {

    XXXWebServiceClass wc = new XXXWebServiceClass();

    wc.getUsers(你的参数);

    ………………

    }

    catch(Eception ex)

    {

        //print or log ex.Message

    }

    引用了WebService,等同于在本地进行一般函数操作一样。

    • 已标记为答案 紫柔 2011年3月30日 12:18
    2011年3月28日 1:31

全部回复

  • Global.asax中应该有个 handle 全局 error 的方法。
    2011年3月27日 9:24
  • 不是非常清楚你的意思:如果你的服务端方法已经暴露成接口,并且已经发布在网上而且客户端已经添加了这个WebService,您完全可以这样做——

    try

    {

    XXXWebServiceClass wc = new XXXWebServiceClass();

    wc.getUsers(你的参数);

    ………………

    }

    catch(Eception ex)

    {

        //print or log ex.Message

    }

    引用了WebService,等同于在本地进行一般函数操作一样。

    • 已标记为答案 紫柔 2011年3月30日 12:18
    2011年3月28日 1:31