如何修复IIS中运行的Web服务中的“请求格式无法识别URL ...”错误?

时间:2009-03-17 12:52:34

标签: asp.net web-services

在IIS中运行Web服务时出现以下错误:

  '/ Inbox Sevice'中的服务器错误   应用。请求格式是   意外地无法识别URL   以'/ GetMailsInfo'结尾。   描述:未处理的异常   在执行期间发生   当前的网络请求。请查看   堆栈跟踪以获取更多信息   错误及其来源   代码。

     

异常详细信息:   System.InvalidOperationException:   URL的请求格式无法识别   意外地结束了   '/ GetMailsInfo'。

     

来源错误:

     

生成了未处理的异常   在执行当前   网络请求。有关的信息   异常的起源和位置   可以使用例外来识别   堆栈跟踪下面。

     

堆栈追踪:

     

[InvalidOperationException:Request   格式无法识别URL   意外地结束了   '/ GetMailsInfo'。]
  System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(类型   type,HttpContext context,HttpRequest   请求,HttpResponse回复)   +490982 System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext   context,String verb,String url,   String filePath)+104
  System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext的   context,String requestType,String   url,String pathTranslated)+127
  System.Web.HttpApplication.MapHttpHandler(HttpContext的   context,String requestType,   VirtualPath路径,String   pathTranslated,Boolean useAppConfig)   +175 System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +120 System.Web.HttpApplication.ExecuteStep(IExecutionStep   步,布尔& completedSynchronously)   155

     

版本信息:Microsoft .NET   框架版本:2.0.50727.42;   ASP.NET版本:2.0.50727.42

有谁知道我为什么会看到此错误,是否有任何方法可以修复它?

3 个答案:

答案 0 :(得分:88)

由于HTTP GET和HTTP POST为disabled by default,请尝试将以下内容添加到配置文件中:

<configuration>
    <system.web>
    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    </system.web>
</configuration>

答案 1 :(得分:5)

我遇到了同样的问题。 要解决此问题,请将[ScriptService]添加到您的服务

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Services;
    using System.Web.Services;

    namespace DemosAjaxcontroltoolkit
    {
        /// <summary>
        /// Summary description for WebService
        /// </summary>
        [ScriptService] 
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
        // [System.Web.Script.Services.ScriptService]
        public class WebService : System.Web.Services.WebService
        {

            [System.Web.Script.Services.ScriptMethod()]
            [WebMethod]

            public string[] GetWords(string prefixText, int count)
            {
                List<string> words = new List<string>();
                words.Add("Apple");
                words.Add("Appertizer");
                words.Add("Apple tree");
                words.Add("Apple Cider");
                words.Add("Afternoon");
                words.Add("Morning");
                words.Add("Breakfeast");
                words.Add("Lunch");
                words.Add("Spider");
                words.Add("Morning");
                words.Add("Day");
                words.Add("Travel");
                words.Add("Night");
                words.Add("Car");
                words.Add("Bikes");
                words.Add("Love");
                words.Add("Good");

                //return words.Where(w => w.StartsWith(prefixText)).Take(count).ToList();

                //List<string> returnedList = words.Where(w => w.StartsWith(prefixText)).Take(count).ToList();
                return words.Where(w => w.ToUpper().StartsWith(prefixText.ToUpper())).ToArray();
            }

        }
    }
}

答案 2 :(得分:2)

只是出于兴趣( - 在通过AJAX访问网络服务的情况下);我发现如果没有传递'content-type'标题( - 即使它是本地/“HttpPostLocalhost”请求),那么问题就出现了,所以我自己传递了标题(例如通过jQuery的'$ .ajax ()'方法而不是没有通过jQuery的'$ .getJSON()'方法),而不是诉诸于此:

https://support.microsoft.com/en-us/kb/819267