如何使用asmx文件创建WebService?

新建一个web工程,追加一个【Web服务(ASMX)】文件,默认生成如下代码:

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

namespace FirstWebService
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    public class WebService1 : System.Web.Services.WebService
    {
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

已经默认创建了一个WebMethod(HelloWorld),F5运行直接访问该文件就可以看到效果了。


WebService1

支持下列操作。有关正式定义,请查看服务说明。

HelloWorld

此 Web 服务使用 http://tempuri.org/ 作为默认命名空间。
建议: 公开 XML Web services 之前,请更改默认命名空间。

每个 XML Web services 都需要一个唯一的命名空间,以便客户端应用程序能够将它与 Web 上的其他服务区分开。http://tempuri.org/ 可用于处于开发阶段的 XML Web services,而已发布的 XML Web services 应使用更为永久的命名空间。

应使用您控制的命名空间来标识 XML Web services。例如,可以使用公司的 Internet 域名作为命名空间的一部分。尽管有许多 XML Web services 命名空间看似 URL,但它们不必指向 Web 上的实际资源。(XML Web services 命名空间为 URI。)

使用 ASP.NET 创建 XML Web services 时,可以使用 WebService 特性的 Namespace 属性更改默认命名空间。WebService 特性适用于包含 XML Web services 方法的类。下面的代码实例将命名空间设置为“http://microsoft.com/webservices/”:

C# public class MyWebService { // 实现 }Visual Basic<WebService(Namespace:=”http://microsoft.com/webservices/”)> Public Class MyWebService ‘ 实现 End ClassC++ public ref class MyWebService { // 实现 };有关 XML 命名空间> 的更多详细信息,请参阅 Namespaces in XML (XML 命名空间)上的 W3C 建议。

有关 WSDL 的更多详细信息,请参阅 WSDL Specification (WSDL 规范)。

有关 URI 的更多详细信息,请参阅 RFC 2396。

点击HelloWorld链接可以转到VS提供的调用页面(/WebService1.asmx?op=HelloWorld

WebService1

单击此处,获取完整的操作列表。

HelloWorld

测试若要使用 HTTP POST 协议对操作进行测试,请单击“调用”按钮。

SOAP 1.1

以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。

POST /WebService1.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: “http://tempuri.org/HelloWorld”

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <HelloWorld xmlns="http://tempuri.org/" /> </soap:Body> </soap:Envelope>
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <HelloWorldResponse xmlns="http://tempuri.org/"> <HelloWorldResult>string</HelloWorldResult> </HelloWorldResponse> </soap:Body> </soap:Envelope>

SOAP 1.2

以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。

POST /WebService1.asmx HTTP/1.1 Host: localhost Content-Type: application/soap+xml; charset=utf-8 Content-Length: length

<?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <HelloWorld xmlns="http://tempuri.org/" /> </soap12:Body> </soap12:Envelope>
HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <HelloWorldResponse xmlns="http://tempuri.org/"> <HelloWorldResult>string</HelloWorldResult> </HelloWorldResponse> </soap12:Body> </soap12:Envelope>

HTTP POST

以下是 HTTP POST 请求和响应示例。所显示的占位符需替换为实际值。

POST /WebService1.asmx/HelloWorld HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: length
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length

<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://tempuri.org/">string</string>

点击调用按钮,打开调用画面(/WebService1.asmx/HelloWorld),可以看到调用WebService的返回值:

This XML file does not appear to have any style information associated with it. The document tree is shown below.

<string xmlns="http://tempuri.org/">Hello World</string>

因为WebService只支持Post提交,通过URL(/WebService1.asmx/HelloWorld)直接访问会返回500错误。

“/”应用程序中的服务器错误。

因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。

源错误: 

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪: 

System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +169901 System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +209 System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +48 System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +308 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.6.1038.0

© 2016 – 2018, 佳佳. 版权所有. 转载请注明出处.

发表评论

电子邮件地址不会被公开。 必填项已用*标注