Genexus生成REST Web Service调用报错:404及IHttpHandler Exception求助
GeneXus REST Web Service 404错误及IHttpHandler Exception排查解决
问题描述
使用GeneXus生成REST Web Service后遇到两类问题:
- 用SoapUI/Postman调用时返回404错误,尝试过两种URL格式:
http://myHostNameOrIPAddress/MyVirtualDir/ws_procName?parm=valuehttp://myHostNameOrIPAddress/MyVirtualDir/ws_procName.aspx?parm=value
也尝试访问http://myHostNameOrIPAddress/MyVirtualDir/ws_procName.aspx?wadl验证服务可用性,同样失败。
- 在GeneXus Web面板用HttpClient调用时,服务器端抛出IHttpHandler Exception异常。
程序属性设置:
Expose as web server: TRUE REST Protocol: TRUE Generate OpenAPI interface: TRUE
HttpClient调用代码:
&HttpClient.Host = "http://myHostNameOrIPAddress" &HttpClient.BaseUrl= "/MyVirtualDir/" &HttpClient.Port = 80 &HttpClient.Secure = 0 &HttpClient.AddHeader("Content-Type", "application/json; charset=utf-8") &JsonSend = &ws_sdtInput.ToJson() //&ws_sdtInput是导入OpenAPI后的输入参数SDT &HttpClient.AddString(&JsonSend.Trim()) &HttpClient.Execute("POST", "/messages/ws_procName.json") &JsonResponse = &ws_sdtOutput.ToJson() //&ws_sdtOutput是导入OpenAPI后的输出参数SDT &JsonResponse = &HttpClient.ToString()
排查与解决步骤
一、确认REST服务的正确访问路径
GeneXus生成的REST服务有固定路由规则:
- 非主程序无需加
.aspx后缀,正确路径格式为:http://[主机/IP]/[虚拟目录]/rest/[程序名] - GET请求带参数示例:
http://myHostNameOrIPAddress/MyVirtualDir/rest/ws_procName?parm=value - 验证服务元数据应访问
http://myHostNameOrIPAddress/MyVirtualDir/openapi.json(开启Generate OpenAPI interface后生成,WADL是SOAP服务的描述格式,不适用于REST)
二、检查程序属性与生成配置
- 确认程序核心属性:
Web Server Class设为Rest(默认会自动设置,但需手动验证)- 程序归属
Web环境,生成时选择了正确的Web目标(如.NET/Java)
- 重新生成整个解决方案,确保路由配置、REST处理程序等文件完整部署到虚拟目录
三、修复HttpClient调用代码错误
原代码存在多处逻辑问题,修正后版本:
&HttpClient.Host = "myHostNameOrIPAddress" // 去掉http://前缀 &HttpClient.BaseUrl= "/MyVirtualDir/" &HttpClient.Port = 80 &HttpClient.Secure = 0 &HttpClient.AddHeader("Content-Type", "application/json; charset=utf-8") &JsonSend = &ws_sdtInput.ToJson() &HttpClient.AddString(&JsonSend.Trim()) &HttpClient.Execute("POST", "rest/ws_procName") // 去掉/messages前缀和.json后缀 // 先获取响应内容,再反序列化到输出SDT &JsonResponse = &HttpClient.ToString() &ws_sdtOutput.FromJson(&JsonResponse)
四、排查IHttpHandler Exception异常
该异常通常由以下原因导致:
- 应用程序池配置不匹配:比如.NET版本与GeneXus生成项目的目标版本不一致
- REST处理程序未注册:检查Web.config(.NET)或web.xml(Java)中是否存在GeneXus的REST处理程序映射
- 权限不足:应用程序池身份没有虚拟目录文件的访问权限
- 程序内部异常:开启GeneXus调试模式,查看服务器端详细错误日志定位具体问题
内容的提问来源于stack exchange,提问作者Valeria Carballo
相关产品推荐
相关产品推荐

