【问题标题】:Invalid Webmethod name无效的 Web 方法名称
【发布时间】:2012-03-30 03:47:12
【问题描述】:

我创建了一个 Web 方法,但是当我转到该站点并输入例如 http://mysite.com/services/Amounts/GetAmount 时,它返回一个错误 Internal Server Error 500。在调查事件日志等问题后,它说 GetAmount 方法名称无效。但我知道妈妈很好

[WebMethod(EnableSession=true)]
public string GetAmount(Amounts amts)
{
    //some logic here to add to the database.
}

当出现这种类型的错误时,我必须调查哪些可能的问题?我检查了所有参考资料,所有内容都正确命名为“GetAmount”。

【问题讨论】:

  • 您仔细查看了“协议”部分中的 web.config 吗?
  • 后面的代码是webservice还是webmethod?如果它后面的代码中的 webmethod 需要将方法定义为静态。
  • 尝试将返回值存储在变量中,然后显示在列表框或其他内容中,当您进行此调用时:mysite.com/services/Amounts/GetAmount .... 为什么值 amts 没有传递或者是在通话中提供?可能是它发现与方法的签名不匹配。虽然我不确定你是如何在客户端实现它的:)
  • 另外,看看这个,可能对您的分析有所帮助:checkupdown.com/status/E500.html.So,我想这是您的 Web 方法定义的某种问题,而不是来自客户端应用程序 :)
  • 这就是事情,还有其他服务,如 /Amounts/InsertProductAmount 可以工作,就像如果你输入那个 url 它不会返回它刚才说的错误......“超出数组索引”或其他东西..但是没关系..因为我知道实际上有人在传递 JSON 时可以工作。我正在使用 Visual Studio 2008 .Net Framework 3.5

标签: c# asp.net web-services asmx


【解决方案1】:

你想在这里做什么?您需要发布更多代码和web.config。您在这里使用的是哪个版本的 .NET?所有这些信息可能会为您提供更好的答案。

首先,您的 URL http://example.org/services/Amounts/GetAmount 似乎不正确 - 除非您使用 ASP.NET 路由或某些 url 重写,否则某处必须有 .asmx

假设您的路由/重写确实工作正常: 一般来说,如果它是一个普通的 SOAP Web 服务,则启用 HTTP get -

<webServices>
    <protocols>
      <add name="HttpGet" />
      <add name="HttpPost" />
    </protocols>
</webServices>

如果您尝试从脚本 (ScriptService) 创建可调用的服务,那么对于 asmx 服务,您需要将该方法标记为 ScriptService,并且您可能需要根据您的 .NET 版本调整 web.config。您还需要启用 HTTP GET - 例如,

[ScriptMethod(UseHttpGet = true)]
public string GetAmount(Amounts amts)

您可能还需要调整 Response Format 是否需要 JSON 或 XML。

【讨论】:

  • 这就是事情,还有其他服务,如 /Amounts/InsertProductAmount 可以工作,就像如果你输入那个 url 它不会返回它刚才说的错误......“超出数组索引”或其他东西..但没关系..因为我知道当实际上有人传递 JSON 时它可以工作。我正在使用 Visual Studio 2008 .Net Framework 3.5
  • @user710502,适用于与GetAmount 方法相反的方法的属性是什么?还要检查执行路由的代码 - 该代码可能存在问题!
猜你喜欢
  • 2012-08-06
  • 1970-01-01
  • 2017-04-07
  • 2016-10-12
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
相关资源
最近更新 更多