如何在 WCF 服务中使 Action 为空白,因为客户端需要空白 SoapAction=""?

How to make Action blank in WCF service, as client need blank SoapAction=""?

我有一个客户,他们提供了一些 WSDL,我使用 svcutil 工具从他们的 WSDL 生成了一些代码。 [System.ServiceModel.OperationContractAttribute(Action="")] 但在 WCF 中是不允许的。我如何才能使此操作成为空白字符串?

以下对我有用:来自 here

下载 Microsoft WCF 示例。 将来自 WF_WCF_Samples\WCF\Extensibility\Interop\RouteByBody\CS\service

的以下文件添加到您的项目中
DispatchByBodyOperationSelector.cs
DispatchByBodyBehaviorAttribute.cs

将以下属性添加到您的接口(在您的 ServiceContract 旁边)

XmlSerializerFormat
DispatchByBodyBehavior

将以下内容添加到您的服务界面

[OperationContract(Action = "")]
public void DoNothing()
{
}

对于我的服务,WrapperNameWrappernamespace 对所有消息都是空的。我不得不进入 DispatchByBodyBehaviorAttribute 并编辑 ApplyDispatchBehavior() 以添加以下行来检查这一点:

if (qname.IsEmpty) {
    qname = new XmlQualifiedName(operationDescription.Messages[0].Body.Parts[0].Name, operationDescription.Messages[0].Body.Parts[0].Namespace);
}