我有一个像这样定义的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定义包装元素的名称(用作根消息元素).