重载操作 wcfservice

Overloading actions wcfservice

也许我混淆了一些东西,但我找不到关于接收 SOAP 消息的 wcf 服务的重载操作的任何问题或文档。

目标:我有 3 条 SOAP 消息进入我的 wcf 服务,在同一端点上具有相同的操作名称。这是固定的,我无法更改它。

我希望以下 wcf 接口可以工作:

    [OperationContract(Action = "urn:oasis:names:tc:SPML:2:0:req/active", Name = "addRequest")]
    void Add(data data);

    [OperationContract(Action = "urn:oasis:names:tc:SPML:2:0:req/active", Name = "modifyRequest")]
    void Modify(psoID psoID, modification modification);

    [OperationContract(Action = "urn:oasis:names:tc:SPML:2:0:req/active", Name = "deleteRequest")]
    void Delete(psoID psoID);

问题:如果我只有一个这样的操作合同,我的服务就可以工作,但如果我有多个操作合同,则会弹出以下错误:`

500System.ServiceModel.ServiceActivationException

我相信它不能有多个具有相同动作名称的操作合同。我也相信这应该是可能的,因为我正在替换一个 soap 服务,该服务确实处理具有相同操作名称的所有 3 条消息。 (wcf 和 soap 应该不相差那么远吧?)

我添加了操作名称以解决问题,但没有成功。

如有任何帮助,我们将不胜感激。谢谢!

Action 属性表示客户端请求的地址,该地址将被发送到服务器并确定在server-side上调用的方法。 这是 Fiddler 捕获的客户端请求。

POST http://10.157.13.69:21011/ HTTP/1.1
Content-Type: text/xml;charset=utf-8
SOAPAction: "urn:oasis:names:tc:SPML:2:0:req/active"
Host: 10.157.13.69:21011
Content-Length: 162
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

SOAPAction HTTP header 是操作的操作名称。 Name属性决定了client-side.

上实用方法的名称
ServiceReference1.ServiceClient client = new ServiceClient();
                client.addRequest(23);

因此,除非我们将 WCF web 服务从 SOAP web 服务更改为 Rest API,否则无法实现此功能,因为 SOAP web 服务寻址样式取决于 Action 字段。
即,我们需要使用 Webhttpbinding 将服务更改为 Restful API。

[OperationContract(Action = "urn:oasis:names:tc:SPML:2:0:req/active", Name = "addRequest")]
[WebGet]
void Add(int data);

如果有什么我可以帮忙的,请随时告诉我。