이것은 질문이 아닙니다-참조를 위해 여기에 게시하십시오.
WebService를 사용할 때 다음 오류가 발생했습니다.
/ myMethodName으로 예기치 않게 끝나는 URL에 대한 요청 형식을 인식 할 수 없습니다.
이것은 질문이 아닙니다-참조를 위해 여기에 게시하십시오.
WebService를 사용할 때 다음 오류가 발생했습니다.
/ myMethodName으로 예기치 않게 끝나는 URL에 대한 요청 형식을 인식 할 수 없습니다.
답변:
이 웹 사이트 에서 해결책을 찾았습니다
web.config에 다음을 추가하기 만하면됩니다.
<configuration>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>
Microsoft의 추가 정보
모든의 90 % 내가 찾은 정보에도 불구을 추가 말해 (이 오류에 대한 해결책을 찾기 위해 노력하면서) HttpGet
와 HttpPost
나를 위해 작동하지 않았다 즉, 구성에 ... 어쨌든 나에게 이해가되지 않았다.
내 응용 프로그램이 많은 서버 (30 이상)에서 실행 중이며이 구성을 추가 할 필요가 없습니다. .NET 2.0 또는 .NET 4.0에서 실행되는 애플리케이션 버전입니다.
나를위한 해결책은 IIS에 ASP.NET을 다시 등록하는 것이 었습니다.
이것을 달성하기 위해 다음 명령 줄을 사용했습니다 ...
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
aspnet_regiis -i
그래도 고쳤다.
올바른 방법을 사용하고 있는지 확인하십시오 : Post / Get, 올바른 컨텐츠 유형 및 올바른 매개 변수 (데이터).
$.ajax({
type: "POST",
url: "/ajax.asmx/GetNews",
data: "{Lang:'tr'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) { generateNews(msg); }
})
content-type: application/json
너무 나를 위해이 문제를 해결했다.
훌륭한.
사례 2-동일한 문제가 발생할 수있는 경우) 내 경우 문제는 다음 줄 때문입니다.
<webServices>
<protocols>
<remove name="Documentation"/>
</protocols>
</webServices>
웹 서비스 함수를 직접 호출하면 서버에서 잘 작동하지만 디버그 환경의 .Net에서 직접 서비스를 실행하고 함수 실행을 수동으로 테스트하려는 경우 실패합니다.
레코드의 경우 오래된 앱을 한 서버에서 다른 서버로 옮길 때이 오류가 발생했습니다. <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>
왜 하나의 웹 서버 에서이 줄없이 작동했는지, 다른 웹 서버에서는 알 수 없었습니다.
이 문제를 해결하기 위해 다음 코드 줄을 사용합니다. web.config 파일에 다음 코드를 작성하십시오
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
localhost에서 개발할 때 문제가 없었습니다. 그러나 웹 서버에 게시 한 후 웹 서비스가 빈 (빈) 결과를 반환하고 로그에 오류가 표시되었습니다.
내 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"
});
또한 apache mod-mono와 함께이 오류가 발생했습니다. 웹 서비스에 대한 문서 페이지가 아직 Linux에서 구현되지 않은 것 같습니다. 그러나이 오류에도 불구하고 웹 서비스가 작동하고 있습니다. ?WSDL
URL 끝에 추가하면 됩니다 (예 : http : //localhost/WebService1.asmx? WSDL).
우리의 경우에는 OPTIONS 요청 메소드 (GET 또는 POST 대신)를 사용하여 웹 서비스를 호출하여 문제점이 발생했습니다.
우리는 여전히 왜 문제가 갑자기 나타 났는지 모른다. 웹 서비스는 5 년 동안 HTTP와 HTTPS 모두에서 완벽하게 실행되었습니다. 우리는 웹 서비스를 소비하는 유일한 사람이며 항상 POST를 사용합니다.
최근에 우리는 웹 서비스 SSL만을 호스팅하는 사이트를 만들기로 결정했습니다. Web.config에 다시 쓰기 규칙을 추가하여 HTTP를 HTTPS로 변환하고 배포 한 후 일반 GET 및 POST 요청 이외에 OPTIONS 요청을 즉시 가져 오기 시작했습니다. OPTIONS 요청으로 인해이 게시물에서 설명한 오류가 발생했습니다.
나머지 응용 프로그램은 완벽하게 작동했습니다. 그러나이 문제로 인해 수백 개의 오류 보고서가 계속 나타납니다.
OPTIONS 메소드를 처리하는 방법을 설명하는 여러 게시물 (예 : 이 게시물 ) 이 있습니다. Global.asax에서 직접 OPTIONS 요청을 처리했습니다. 이로 인해 문제가 사라졌습니다.
protected void Application_BeginRequest(object sender, EventArgs e)
{
var req = HttpContext.Current.Request;
var resp = HttpContext.Current.Response;
if (req.HttpMethod == "OPTIONS")
{
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
resp.AddHeader("Access-Control-Allow-Methods", "GET, POST");
resp.AddHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, SOAPAction");
resp.AddHeader("Access-Control-Max-Age", "1728000");
resp.End();
}
}
웹 서비스 호출 시작 부분에 $ .holdReady (true) 및 종료 후 $ .holdReady (false)를 추가 할 때 까지이 오류가 발생 했습니다. 이것은 페이지의 준비 상태를 일시 중지하는 jQuery이므로 document.ready 함수 내의 모든 스크립트가이를 기다리고 있습니다 (다른 가능하지만 알려지지 않은 것들 중 하나).
<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>