我有一个像这样定义的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以调用服务。
但我只是想知道: 为什么我们需要操作和操作名称来识别单个服务方法?只有一个就够了。
答案 0 :(得分:2)
您不需要Action
和OperationName
来识别服务操作。操作名称定义SOAP消息的结构(包装元素名称),但不用于操作标识。该操作用于操作识别。
有一些非标准的SOAP解析器使用操作名称(根体元素)进行操作识别,但这些解析器不使用SOAP操作。
编辑:我今天和我的同事讨论过,看起来我之前的回答是不正确的。 SOAP协议中消息的真正唯一标识是SOAP Action + Root元素。因此,在这种情况下,Action
定义SOAP Action,OperationName
定义包装元素的名称(用作根消息元素)。