【问题标题】:Add a web service (ASMX) to existing asp.net forms website将 Web 服务 (ASMX) 添加到现有的 asp.net 表单网站
【发布时间】:2013-10-22 15:07:52
【问题描述】:

我正在尝试在现有的 asp.net Web 表单应用程序中创建 Web 服务,但它不起作用。以下代码描述了该服务:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class TestService: System.Web.Services.WebService {

    public TestService() {

        //Uncomment the following line if using designed components 
       //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld(string name) {
        return "Hello " + name;
    }    
}

当我尝试测试此 Web 服务时,浏览器会尝试下载该服务而不是执行它:

另外,如果我尝试从另一个项目中引用该服务,我会收到以下错误:

URL http://localhost:64925/services/TestService.asmx 的文档未被识别为已知文档类型。 来自每种已知类型的错误消息可能会帮助您解决问题: - 来自“XML Schema”的报告是“无法识别文档格式(内容类型为 'text/html; charset=utf-8

我的猜测是这与未正确配置“服务”目录有关,但如果将服务添加到站点的根目录,我会遇到同样的问题。

我已经为 .Net 2 和 4 尝试过 aspnet_regiis 我正在使用带有 IIS Express 的 Visual Studio 2012。

更新: 该网站似乎也在引用 SharePoint 网络服务,我刚刚在错误详细信息中发现了以下奇怪的消息:

下载http://localhost:64925/services/TestService.asmx/_vti_bin/ListData.svc/$metadata 时出错。 请求失败,HTTP 状态为 404:未找到。

【问题讨论】:

  • 正如它所说,它是无法识别的内容类型。所以“asmx”类型没有在 IIS 中正确注册,所以当浏览器请求链接时,服务器会认为“这到底是什么 - 我将其作为纯文件提供”,因此下载。
  • @Stevo 谢谢,但我如何修复它运行带有 IIS Express 的 Visual Studio 2012?
  • 很遗憾我不能提供具体的指导(因为我不知道)。我将从查看 IIS 配置开始。正如您所说,它可以在站点外的新 Web 服务上运行并且运行良好,因此 IIS 配置中的某些内容无法正常运行。我会研究现有站点和新站点之间的差异,并一一更改现有站点的设置以查找故障。抱歉,我无法提供更多帮助。

标签: c# asp.net web-services iis visual-studio-2012


【解决方案1】:

我已经找到了答案。

Global.asax 文件有一些自定义代码来重写 Application_BeginRequest 事件处理程序中的 URL,并且此代码未正确处理对 .ASMX 文件的请求。

只需向此逻辑添加过滤器以排除 .ASMX 文件类型即可解决我的问题。

感谢所有花时间尝试帮助解决此问题的人。

【讨论】:

    【解决方案2】:

    我刚刚尝试复制该问题,但无济于事。从网站返回完全符合预期。

    直接复制您的代码并将其粘贴到 .NET 3.5 Web 表单站点内的空白服务文档中。

    你知道它是否在 web.config 文件中创建了正确的处理程序吗?

    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
      </httpHandlers>
      <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </httpModules>
    

    只是想知道如果它没有告诉浏览器如何正确处理文档,这是否可能是您的问题。

    【讨论】:

    • 干杯,我还在现有站点之外尝试了一个空白 Web 服务项目,并且效果很好。我认为它必须是特定于配置或现有网站的东西。处理程序在 web.config 中看起来很好。我认为它与 SharePoint 有关,已更新问题。
    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多