Я реализую веб-сервис WCF, который взаимодействует с клиентом, чей код я не контролирую. WSDL был предоставлен клиентом.
Я сгенерировал файлы C # из WSDL, используя SvcUtil, и, кроме обсуждаемых ошибок здесь У меня не было проблем.
После размещения службы в IIS 7.0 с включенным SSL (требуется клиентом) я попытался заставить клиента выполнить запрос к службе.
В этот момент я получил следующую ошибку:
The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).
Я подтвердил, что могу использовать метаданные, опубликованные службой вместе с SOAPUI, для того же запроса. Это работало нормально.
Затем я попытался использовать SOAPUI, используя WSDL, поставляемый с клиентом. Это не удалось с той же пустой ошибкой действия, описанной выше.
Затем я подключил Wireshark (включив расшифровку SSL) и убедился, что в сообщении, отправленном клиентом, действительно отсутствует действие SOAPAction, поэтому, похоже, это определенно проблема.
Поскольку я не могу изменить клиента, есть ли способ заставить веб-службу WCF взаимодействовать с таким клиентом? Я предполагаю, что это должно было бы принять запросы без SOAPAction и вместо этого получить желаемый запрос от типа объекта запроса в конверте SOAP?