WCF操作名称和操作之间的关系

WCF操作名称和操作之间的关系,wcf,soap,Wcf,Soap,我的WCF服务定义如下: [ServiceContract(Namespace = "http://AttributeServiceNameSpace", Name = "AttributeServiceName1")] public interface IHelloIndigoService1 { [OperationContract(Name="AttributeOperationName11", Action = "aaa2")] String HelloIndigo11(

我的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/1.1

内容类型: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消息中

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

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

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


编辑:今天我和同事讨论了一下,我之前的回答似乎不正确。SOAP协议中消息的真正唯一标识是SOAP操作+根元素。因此在本例中,
Action
定义了SOAP操作,
OperationName
定义了包装器元素的名称(用作根消息元素)。

谢谢。但我还是不明白为什么我们还需要手术名称?如果操作可以识别服务操作,为什么不使用操作值作为SOAP包装器元素名称呢?例如,因为这样可以使用相同的包装器元素进行多个操作,但更重要的原因是互操作性。WCF可用于向其他平台公开服务,也可用于使用来自其他平台的服务,您需要一种分离操作和包装器元素名称的方法。包装器元素只是消息序列化的一部分。