当消费WebService时,我得到了以下错误:
URL意外以/myMethodName结尾,请求格式无法识别
如何解决这个问题?
当消费WebService时,我得到了以下错误:
URL意外以/myMethodName结尾,请求格式无法识别
如何解决这个问题?
当前回答
我在本地主机开发时没有这个问题。然而,一旦我发布到一个web服务器,web服务返回一个空(空白)的结果,我看到我的日志中的错误。
我通过设置我的ajax contentType来修复它:
"application/json; charset=utf-8"
并使用:
JSON.stringify()
在我张贴的物体上。
var postData = {data: myData};
$.ajax({
type: "POST",
url: "../MyService.asmx/MyMethod",
data: JSON.stringify(postData),
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(data);
},
dataType: "json"
});
其他回答
极好的。
情况2 -同样的问题可以出现)在我的情况下,问题是由于以下一行:
<webServices>
<protocols>
<remove name="Documentation"/>
</protocols>
</webServices>
它在服务器上工作得很好,因为直接调用webservice函数——但是如果你在调试环境中直接从。net运行服务,并且想要手动测试运行该函数,则会失败。
在html中,你必须将调用包含在一个带有GET的表单中
<a href="/service/servicename.asmx/FunctionName/parameter=SomeValue">label</a>
您还可以使用POST,其操作是web服务的位置,并通过输入标记输入参数。
还有SOAP和代理类。
在我的情况下,我有一个重载的函数,导致这个异常,一旦我改变了我的第二个函数的名称,它运行正常,猜web服务器不支持函数重载
我得到这个错误,直到我添加(如下所示的代码)$. holdready (true)在我的web服务调用的开始和$. holdready (false)结束后。这是jQuery的东西挂起页面的就绪状态,所以文档中的任何脚本。就绪函数将等待这个(在其他可能但我不知道的事情中)。
<span class="AjaxPlaceHolder"></span>
<script type="text/javascript">
$.holdReady(true);
function GetHTML(source, section){
var divToBeWorkedOn = ".AjaxPlaceHolder";
var webMethod = "../MyService.asmx/MyMethod";
var parameters = "{'source':'" + source + "','section':'" + section + "'}";
$.ajax({
type: "POST",
url: webMethod,
data: parameters,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
xhrFields: {
withCredentials: false
},
crossDomain: true,
success: function(data) {
$.holdReady(false);
var myData = data.d;
if (myData != null) {
$(divToBeWorkedOn).prepend(myData.html);
}
},
error: function(e){
$.holdReady(false);
$(divToBeWorkedOn).html("Unavailable");
}
});
}
GetHTML("external", "Staff Directory");
</script>
为了记录,当我将一个旧应用程序从一个服务器移动到另一个服务器时,我得到了这个错误。我添加了<add name="HttpGet"/> <add name="HttpPost"/>元素到web。Config,它将错误更改为:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at BitMeter2.DataBuffer.incrementCurrent(Int64 val)
at BitMeter2.DataBuffer.WindOn(Int64 count, Int64 amount)
at BitMeter2.DataHistory.windOnBuffer(DataBuffer buffer, Int64 totalAmount, Int32 increments)
at BitMeter2.DataHistory.NewData(Int64 downloadValue, Int64 uploadValue)
at BitMeter2.frmMain.tickProcessing(Boolean fromTimerEvent)
为了修复这个错误,我必须添加ScriptHandlerFactory行到web.config:
<system.webServer>
<handlers>
<remove name="ScriptHandlerFactory" />
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</handlers>
</system.webServer>
为什么在一个服务器上没有这些行,而在另一个服务器上没有,我不知道。