С# - Сделать WCF Принять любые префиксы для мыльных сообщений

В этой ситуации есть существующий клиент, мне нужно построить сервер, который будет потреблять клиент. Я не владею клиентом и не могу изменить его. Клиентское мыльное сообщение может быть указано

введите описание изображения здесь

Как мне заставить мой сервис принимать оба приложенных к нему приставки. В настоящее время он принимает только префикс "c2b" и не обрабатывает никаких запросов с префиксом "ns1".

Ответ 1

Вы передаете объект DTO (объект класса) для обслуживания, но ваша служба wcf не может распознать точный класс. Поэтому, чтобы WCF принимал любые префиксы, просто добавьте этот префикс с соответствующим расположением объекта. Вам нужно добавить еще один атрибут xmlns в <soapenv:Envelope>.

Eg.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://cps.huawei.com/cpsinterface/c2bpayment" xmlns:c2B="http://cps.huawei.com/cpsinterface/c2bpayment">

Ответ 2

Ответ Shubham Sharma на 100% правильный.

Чтобы добавить немного больше объяснений, эти префиксы являются просто псевдонимом имен, которые вы объявили. Они ничего не значат. Если вы хотите использовать ns1 в качестве префикса, все, что вам нужно сделать, это заменить xmlns: c2b на xmlns: ns1 вверху.

В вашем случае клиент не знает, как сгенерировать запрос. Может быть, лучше посоветовать им использовать некоторый инструмент создания запросов на основе wsdl - например SoapUI.

Ответ 3

Честно говоря, вы можете быть здесь. У вас есть клиент, который предоставляет полностью недопустимое сообщение SOAP - он использует префикс пространства имен, который он вообще не объявляет.

У меня нет времени, чтобы попробовать, но моя первая мысль была, возможно, с помощью XmlNamespaceDeclarationsAttribute могла бы работать - вы могли бы поставьте его в свой корневой класс C2BPaymentConfirmationRequest и предварительно заполните его в своем конструкторе "ns1", указав " http://cps.huawei.com/cpsinterface/c2bpayment". Стоит попробовать. Сообщите нам, если это сработает.