Могу ли я добавить пользовательский заголовок SOAP в входящие/исходящие сообщения WCF в basicHttpBinding, например, мы можем добавить собственный заголовок аутентификации в веб-сервисы ASMX? Этот настраиваемый SOAP-заголовок должен быть доступен с использованием клиентов веб-службы .net 2.0/1.1 (доступный с помощью инструмента WSDL.EXE).Как добавить пользовательские заголовки мыла в wcf?
ответ
Проверьте код WCF Extras на Codeplex - это простая библиотека расширений для WCF, которая предлагает, среди прочего, пользовательские заголовки SOAP.
Другой вариант - использовать WCF message contracts в вашей службе WCF - это также легко позволяет определять и устанавливать заголовки WCF SOAP.
[MessageContract]
public class BankingTransaction
{
[MessageHeader]
public Operation operation;
[MessageHeader]
public DateTime transactionDate;
[MessageBodyMember]
private Account sourceAccount;
[MessageBodyMember]
private Account targetAccount;
[MessageBodyMember]
public int amount;
}
Здесь «операция» и «транзакция» определяются как заголовки SOAP.
Если ни один из этих методов не помогает, вы должны ознакомиться с концепцией WCF Message Inspectors, которую вы можете написать как расширения. Они позволяют вам, например, вставлять определенные заголовки в сообщение при каждом исходящем вызове на клиенте и извлекать их из сообщения на сервере для вашего использования.
Посмотрите на это сообщение в блоге Handling custom SOAP headers via WCF Behaviors, чтобы узнать, как написать инспектор сообщений и как его включить в настройку вашего проекта.
клиентская сторона IClientMessageInspector
определяет два метода BeforeSendRequest
и AfterReceiveReply
в то время как на стороне сервера IDispatchMessageInspector
имеет противоположные методы, т.е. AfterReceiveRequest
и BeforeSendReply
.
При этом вы можете добавлять заголовки к каждому сообщению, проходящему через провод (или выборочно только к нескольким).
Вот отрывок из IClientMessageInspector
Implementor мы используем для автомагически передачи информации о локализации (язык и данные культуры) через дорогу от клиентов к серверу - должно дать вам представление о том, как начать:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
International intlHeader = new International();
intlHeader.Locale = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
MessageHeader header = MessageHeader.CreateHeader(WSI18N.ElementNames.International, WSI18N.NamespaceURI, intlHeader);
request.Headers.Add(header);
return null;
}
На стороне сервера вы должны проверить наличие этих заголовков, и если они есть, извлеките их из конверта SOAP и используйте их.
UPDATE: хорошо, вы клиенты на .NET 2.0 и не с использованием WCF - хорошая новость заключается в том, это должно работать нормально - видеть этот блог Custom SOAP Headers: WCF and ASMX для деталей. Вы все равно можете использовать инспектор сообщений на стороне сервера, чтобы обнюхать и извлечь пользовательские заголовки, отправляемые вашими клиентами .NET 2.0.
Спасибо marc_s, я пытался использовать WCF Extras, я добавил атрибут «XmlSerializerFormat» в Service Contract WCF Extras выдает ошибку при доступе к службам. Есть ли другое решение, например, WCF Extras? Могу ли я добавить атрибут MessageContract как атрибут для всех методов, поскольку я добавил SoapHeader в службы ASMX? Мое требование состоит в том, что мне нужно отправить данные (то же самое имя пользователя и пароль) для каждого вызова службы WCF. Есть ли способ реализовать этот? – nRk
yah marc_s, это выглядит великолепно. но в упомянутой статье клиент должен находиться в .net 3.0 или выше .. но в моем случае клиенты находятся в .net 2.0 и 1.1. Можно ли это реализовать? – nRk
- 1. Пользовательские заголовки в WCF
- 2. Как добавить MessageID в заголовки мыла запроса и ответа WCF?
- 3. Xamarin WCF IClientMessageInspector/Пользовательские заголовки
- 4. Как я могу подписывать заголовки мыла в клиенте WCF
- 5. Пользовательские заголовки сообщений в WCF на Mono
- 6. Как добавить пользовательские заголовки мыла или использовать имя пользователя auth по http?
- 7. Ошибка WCF: заголовки мыла не поддерживаются ни одной версией сообщения
- 8. Добавить пользовательские заголовки, используя HttpWebRequest
- 9. Невозможно добавить заголовки столбцов Пользовательские
- 10. Как добавить пользовательские заголовки HTTP в пользовательские вкладки Chrome?
- 11. Добавить пользовательские заголовки в запросы кроссбраузера
- 12. WCF Формат мыла
- 13. Wcf netTcpBinding без мыла
- 14. WCF. Как добавить пользовательские типы DataContact в ссылку WCF Client?
- 15. как добавить параметр мыла тела в ФОС
- 16. Как получить BinarySecurityToken в запрос мыла wcf
- 17. Добавить пользовательские заголовки с библиотекой Volley
- 18. Добавить пользовательские заголовки http для запросов chai
- 19. Пользовательские заголовки в Nginx
- 20. Digitally Sign заголовки мыла в php
- 21. WCF и пользовательская проверка подлинности мыла
- 22. Как добавить заголовок мыла с помощью мыла-мыла или сильного мыла в node.js
- 23. Android WebView пользовательские заголовки
- 24. Как добавить пользовательские заголовки HTTP в ответ CXF?
- 25. Как добавить пользовательские заголовки в класс SMTP System.Net.Mail?
- 26. Как добавить пользовательские заголовки интернета в электронные письма?
- 27. Как добавить пользовательские заголовки HTTP в IIS из командной строки
- 28. Как добавить пользовательские заголовки HTTP в Asp.Net MVC-
- 29. BizTalk отправляет пользовательские заголовки WCF с защитой уровня сообщений
- 30. nginx - как заблокировать пользовательские заголовки
обновил мой ответ с информацией о контролерах сообщений –
обновил мой ответ снова с информацией об совместимости ASMX/WCF в отношении SOAP headesr –
спасибо marc_s, это выглядит хорошо, я попробую. – nRk