Как сделать Action пустым в сервисе WCF, так как клиенту нужно пустое SoapAction = ""? - PullRequest
0 голосов
/ 27 августа 2018

У меня есть клиент, которому они дали WSDL, я сгенерировал некоторый код из их WSDL, используя инструмент svcutil. [System.ServiceModel.OperationContractAttribute(Action="")] но это не разрешено в WCF. Как я могу сделать это Действие пустой строкой?

1 Ответ

0 голосов
/ 13 ноября 2018

У меня сработало следующее: с здесь

Загрузите примеры Microsoft WCF. Добавьте следующие файлы в ваш проект из WF_WCF_Samples \ WCF \ Extensibility \ Interop \ RouteByBody \ CS \ service

DispatchByBodyOperationSelector.cs
DispatchByBodyBehaviorAttribute.cs

Добавьте следующие атрибуты в ваш интерфейс (рядом с ServiceContract)

XmlSerializerFormat
DispatchByBodyBehavior

Добавьте следующее в ваш сервисный интерфейс

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

Для моего сервиса WrapperName и Wrappernamespace равны нулю для всех сообщений. Мне пришлось пойти в DispatchByBodyBehaviorAttribute и отредактировать ApplyDispatchBehavior(), чтобы добавить следующие строки, чтобы проверить это:

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