Reputation: 171
Greetings,
I've looked everywhere and every answer I see tells me to put the following in my web.config:
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
So I've done that and I'm still getting the error.
Here is the script from my web page:
<script>
$(function () {
$('#btn').click(
function () {
CallHome();
}
);
});
function CallHome() {
$.ajax({
type: "POST",
url: "HelloWorld.asmx/HelloWorld",
dataType: "xml",
data: "{}",
contentType: "xml",
success: function(data) {
alert(data);
}
});
}
</script>
And the WebService.vb is:
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Web.Script.Services
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class HelloWorld
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function HelloWorld() As String
Return "Hello World"
End Function
End Class
I created a brand new web project to pare down my example to the minimum. Somewhere I am screwing up! Can you help?
THANKS!
UPDATE: Kind of new to fiddler... but here are the headers from the ajax post:
OPTIONS http://localhost:49891/HelloWorld.asmx/HelloWorld HTTP/1.1
Host: localhost:49891
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: null
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Access-Control-Request-Headers: Content-Type, Accept
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
And here are the headers when I just to a normal form post (that works):
POST http://localhost:49891/HelloWorld.asmx/HelloWorld HTTP/1.1
Host: localhost:49891
Connection: keep-alive
Referer: http://localhost:49891/HelloWorld.asmx?op=HelloWorld
Content-Length: 0
Cache-Control: max-age=0
Origin: http://localhost:49891
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: OriginalGUID=2d9e0303-754d-4871-a875-9e184701e91d
Not sure if that helps...
UPDATE 2: And here is the error response from the server:
HTTP/1.1 500 Internal Server Error
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 28 Mar 2011 05:06:18 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 4444
Connection: Close
<html>
<head>
<title>Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.</title>
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Lucida Console";font-size: .9em}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
</style>
</head>
<body bgcolor="white">
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
<br><br>
<b> Exception Details: </b>System.InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.<br><br>
<b>Source Error:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code>
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</code>
</td>
</tr>
</table>
<br>
<b>Stack Trace:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>
[InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.]
System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +518909
System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +212
System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +47
System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +203
System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +128
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
</pre></code>
</td>
</tr>
</table>
<br>
<hr width=100% size=1 color=silver>
<b>Version Information:</b> Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1
</font>
</body>
</html>
<!--
[InvalidOperationException]: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.
at System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response)
at System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
at System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)
at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
-->
Upvotes: 10
Views: 18302
Reputation: 135
Surely, this post is coming too late for Dave, but could be usefull to someone that is getting this message.
I was testing a web service in Internet Explorer and from nowhere it starts to show this error everytime that I invoke a web service.
Some debugging after I found that I installed an unwanted application called Lucky Leap. this adds an extension to Internet Explorer that triggers the error message.
I uninstalled it (Control Panel -> Programs (or Add/Remove Programs) -> Uninstall a Program) and was able again to call my web service without errors.
I hope this helps,
Upvotes: 0
Reputation: 11773
I hate to post answers to problems that I don't fully understand myself, but I recently ran into this problem as well and I thought I'd share my rather peculiar solution.
I had a webservice that had worked fine for months and suddenly started throwing the "Request format is unrecognized..." exception. The service was already properly configured for GET and POST protocols so that was not the issue. I thought perhaps another teammate had made a web.config change, but that wasn't the case either.
The solution, which I ran across by accident, was to drop a new, empty web.config file in the folder that contained the webservice which cause an invalid configuration error. Upon deleting the empty web.config file, the webservice magically started working again. I don't understand why it broke in the first place and I'm not 100% clear on why this fixed it, but it did. YMMV!
Upvotes: 0
Reputation: 2981
I was looking for a solution to this problem and found this question, and though I'd share my workaround/hack. I'm using asmx web services in sharepoint and had a need for an asmx method to correctly respond to a HEAD request (apparently the itunes store does a HEAD request to your RSS feed url before doing a GET request to download the feed). From doing some googling I found that asmx web services don't support HEAD requests, which seems to be correct http://forums.asp.net/t/1442810.aspx/1
Knowing asmx and HEAD didn't play well together and I didn't want to redo everything in WCF, I tried to figure out the hack of least resistance. After conferring with the team, we decided to create an HTTP module that would look for HEAD requests to asmx web services and go ahead and do the GET request on the server and just return the headers. I know this is kinda wasteful but it seems to work as well as I expected based on my tests in CURL/firebug. Here's most of the code for the HTTP module.
public class HeadInterceptor : IHttpModule
{
if (HttpContext.Current.Request.Url.AbsoluteUri.ToLower().Contains("asmx")
&& HttpContext.Current.Request.HttpMethod == "HEAD")
{
WebRequest req = HttpWebRequest.Create(HttpContext.Current.Request.Url);
req.Method = "GET";
System.Net.WebResponse resp = req.GetResponse();
HttpContext.Current.Response.Clear();
foreach (string k in resp.Headers.AllKeys)
{
HttpContext.Current.Response.AddHeader(k, resp.Headers[k]);
}
HttpContext.Current.Response.End();
}
}
Upvotes: 2
Reputation: 3865
Are your web service and your webpage in the same solution or are you running two servers? I had the problem when my webpage was calling a web service on another server. This causes some permission issues with Javascript.
If you are running it on another server you might have to create a proxy web service in your solution containing the webpage. This service needs to call the web service in your other solution. From your webpage you call the local web service which will redirect your call to the one on the other server.
Upvotes: 0
Reputation: 480
Are you getting "Hello World" when you hit that service from the browser?
Also, are you missing a trailing "/" in the url?
Upvotes: 0