重载操作 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);
如果有什么我可以帮忙的,请随时告诉我。
也许我混淆了一些东西,但我找不到关于接收 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);
如果有什么我可以帮忙的,请随时告诉我。