WCF操作名称与动作之间的关系

我有一个像这样定义的WCF服务:

[ServiceContract(Namespace = "http://AttributeServiceNameSpace", Name = "AttributeServiceName1")]
public interface IHelloIndigoService1
{
    [OperationContract(Name="AttributeOperationName11", Action = "aaa2")]
    String HelloIndigo11();


    [OperationContract(Name = "AttributeOperationName12", Action = "aaa1")]
    String HelloIndigo12();
}

我在服务调用期间捕获了HTTP消息,如下所示.

POST http://xxx/Service.svc/IHelloIndigoServiceAddress1 HTTP / 1.1

Content-Type:text / xml;字符集= utf-8的

SOAPAction:“aaa2”

主持人:shao-02.fareast.corp.microsoft.com

内容长度:162

期待:100-继续

连接:保持活力

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
     <AttributeOperationName11 xmlns="http://AttributeServiceNameSpace"/>
  </s:Body>
</s:Envelope>

因此,我们可以看到SOAP消息中存在Action和Operation Name以调用服务.

但我只是想知道:
为什么我们需要Action和Operation Name来识别单个服务方法?只有一个就足够了.

最佳答案 您不需要Action和OperationName来标识服务操作.操作名称定义SOAP消息的结构(包装元素名称),但不用于操作标识.该动作用于操作识别.

有一些非标准的SOAP解析器使用操作名称(根体元素)进行操作识别,但这些解析器不使用SOAP操作.

编辑:我今天和我的同事讨论过,看起来我之前的回答是不正确的. SOAP协议中消息的真正唯一标识是SOAP Action Root元素.因此,在这种情况下,Action定义SOAP Action,OperationName定义包装元素的名称(用作根消息元素).

点赞