【问题标题】:Overloading actions wcfservice重载操作 wcf 服务
【发布时间】:2019-10-31 14:33:05
【问题描述】:

也许我混淆了一些东西,但我找不到任何关于接收 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

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

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

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

【问题讨论】:

  • 能否请您配置WCF trace log并分享?跟踪日志会说明服务未激活的原因。
  • 感谢 wcf 跟踪的提示。它将在将来帮助我进行调试,但问题已得到解答,因此无需提交跟踪

标签: c# wcf operationcontract


【解决方案1】:

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

POST http://10.157.13.69:21011/ HTTP/1.1
内容类型:text/xml;charset=utf-8
SOAPAction:“urn:oasis:names:tc:SPML:2:0:req/active”
主机:10.157.13.69:21011
内容长度:162
期望:100-继续
接受编码:gzip、deflate
连接:保持活动状态

SOAPAction HTTP 标头是操作的操作名称。 Name 属性决定了客户端实际方法的名称。

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);

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

【讨论】:

  • 我已经放弃了这个想法。感谢您引导我使用完整的 api。完成后我会检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多