Как мне изменить службу wcf, чтобы она могла принимать mustunderstand = 1?Это сценарий, в котором я должен изменить службу, чтобы иметь возможность принимать запрос от клиента.Клиент отправляет mustunderstand = 1 в заголовке.
Служба настроена на использование basichttpBinding
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
<transport clientCredentialType="None"></transport>
</security>
Использование интерфейса пользователя soap Я вставляю следующий токен имени пользователя в заголовок
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-2684C13EA73A35131015516775308851">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
Я могу воспроизвести проблему на soapПользовательский интерфейс, когда я вставляю этот токен в запрос службы wcf.Это ошибка
<FaultMsgRec>
<ErrCode>100</ErrCode>
<ErrCat>Error</ErrCat>
<ErrDesc>An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.--> The header 'Security' from the namespace 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' was not understood by the recipient of this message, causing the message to not be processed. This error typically indicates that the sender of this message has enabled a communication protocol that the receiver cannot process. Please ensure that the configuration of the client's binding is consistent with the service's binding. </ErrDesc>
</FaultMsgRec>
Поскольку у меня есть контроль над службой wcf, я могу пойти и добавить ValidateMustUnderstand = false в поведении службы.Точно так же, как это объяснено в ссылке https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.description.mustunderstandbehavior.validatemustunderstand?view=netframework-4.7.2
Как только я добавлю это к поведению службы, ошибка исчезнет.Но я не хочу отключать проверку заголовка, особенно если это имя пользователя, пароль.Что я должен сделать, чтобы позволить mustunderstand = 1?Я что-то упускаю из-за того, что служба автоматически не обрабатывает mustunderstand = 1 по умолчанию.Я знаю, что на клиенте должен быть написан код для отправки 0 в заголовке.
Я использую контракты сообщений в моем сервисе wcf, а не контракт данных.Я понимаю, что для определенных свойств я могу пойти и добавить такие атрибуты, как эта ссылка https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.messageheaderattribute.mustunderstand?view=netframework-4.7.2. Но я не добавляю никаких свойств.Я просто добавляю его на первый линк в soapenv: mustunderstand = 1
Пожалуйста, помогите !.
Спасибо