第七十六章 方法关键字 - SoapAction

本文详细介绍了如何在Web服务中使用SoapAction关键字指定SOAP操作,包括其用法、默认值设定、WSDL影响及实际请求消息格式。了解如何确保HTTP头中SOAP动作的正确路由和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

第七十六章 方法关键字 - SoapAction

指定当通过HTTP将此方法作为web方法调用时,要在HTTP头中使用的SOAP操作。仅适用于定义为web服务web客户端的类。

用法

要指定将此方法用作web方法时在HTTP头中使用的SOAP操作,请使用以下语法:

Method name(formal_spec) As returnclass [ WebMethod, SoapAction = soapaction ] 
{    //implementation }

其中soapaction是下列之一:

  • “[default]”—SOAP操作的默认值,即NAMESPACE/Package.Class.Method
  • "customValue" -使用customValue作为SOAP操作。
    该值应该是标识SOAP请求意图的URI

如果指定了一个自定义的值,它必须在web服务的每个web方法中是唯一的,或者你必须为每个web方法指定SoapRequestMessage关键字(并且为该关键字使用唯一的值)。

  • “” -使用空值作为SOAP操作。这种情况很少见。

详情

web方法SOAP动作通常用于路由请求SOAP消息
例如,防火墙可以使用它来适当地过滤SOAP请求消息
InterSystems IRIS web服务使用SOAP操作(与消息本身结合)来确定如何处理请求消息。

该关键字允许指定在作为web方法调用此方法时使用的HTTP SOAP动作。
对于SOAP 1.1, SOAP动作包含在SOAPAction HTTP报头中。
对于SOAP 1.2,它包含在Content-Type HTTP报头中。

默认

如果忽略SoapAction关键字,SOAP动作的形式如下:

NAMESPACE/Package.Class.Method

其中NAMESPACEweb服务NAMESPACE参数的值,Package.Classweb服务类的名称,Methodweb方法的名称。

WSDL的关系

SoapAction关键字影响web服务WSDL的<binding>部分。
例如,以下web方法:

Method Add(a as %Numeric,b as %Numeric) As %Numeric [ SoapAction = MySoapAction,WebMethod ]
{
    Quit a + b
}

对于这个web服务WSDL<binding>部分如下所示:

<binding name="MyServiceNameSoap" type="s0:MyServiceNameSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="Add">
        <soap:operation soapAction="MySoapAction" style="document"/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
    </operation>
</binding>

默认情况下,如果方法没有指定SoapAction关键字,<soap:operation>元素可能会像下面这样:

<soap:operation soapAction="http://www.mynamespace.org/ROBJDemo.BasicWS.Add" style="document"/>

如果使用SOAP向导从WSDL生成 web服务服务或客户端,将此关键字设置为适合于该WSDL的关键字。

对消息的影响

对于前面显示的web方法web服务期望收到以下形式的请求消息(对于SOAP 1.1):

POST /csp/gsop/ROBJDemo.BasicWS.cls HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; InterSystems IRIS;)
Host: localhost:8080
Connection: Close
Accept-Encoding: gzip
SOAPAction: MySoapAction
Content-Length: 379
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope >...

默认情况下,如果方法没有指定SoapAction关键字,SoapAction行可能会像下面这样:

SOAPAction: http://www.mynamespace.org/ROBJDemo.BasicWS.Add

注意,对于SOAP 1.2,细节略有不同。
在这种情况下,web服务期望收到如下形式的请求消息:

POST /csp/gsop/ROBJDemo.BasicWS.cls HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; InterSystems IRIS;)
Host: localhost:8080
Connection: Close
Accept-Encoding: gzip
Content-Length: 377
Content-Type: application/soap+xml; charset=UTF-8; action="MySoapAction"

<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope >...
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaoxin521123

谢谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值