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

时间:2012-02-28 09:54:59

标签: wcf soap

我有一个像这样定义的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-continue

连接:Keep-Alive

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

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

但我只是想知道: 为什么我们需要操作操作名称来识别单个服务方法?只有一个就够了。

1 个答案:

答案 0 :(得分:2)

您不需要ActionOperationName来识别服务操作。操作名称定义SOAP消息的结构(包装元素名称),但不用于操作标识。该操作用于操作识别。

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

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