Я подключаюсь к сервису Soap1.1.Это уже существующий сервис, использующий определение интерфейса промышленного стандарта (названное MultiSpeak, чрезвычайно распространенное в служебном пространстве)
Стандарты MultiSpeak не содержат положений для передачи CustomerID, который требуется этому поставщику, поэтому онинемного изменил SoapEvenelope.Моя проблема в том, что я не могу понять, как убедить WCF выдавать правильный XML.
Мой текущий конверт выглядит следующим образом:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:MultiSpeakMsgHeader UserID="****" Pwd="****" Company="****"
xmlns="http://www.multispeak.org/Version_3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:h="http://www.multispeak.org/Version_3.0" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetAMRSupportedMeters xmlns="http://www.multispeak.org/Version_3.0" />
</s:Body>
</s:Envelope>
Вот как мне нужно, чтобы он выглядел, чтобы работать:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:MultiSpeakMsgHeader UserID="****" Pwd="****" Company="****"
vendor:CustomerID="StringValue"
xmlns="http://www.multispeak.org/Version_3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:h="http://www.multispeak.org/Version_3.0"
xmlns:vendor="http://www.MyVendor.com/Multispeak3"/>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetAMRSupportedMeters xmlns="http://www.multispeak.org/Version_3.0" />
</s:Body>
Итак, введено новое пространство имен (пользовательское пространство имен моего поставщика) и в существующий объект «MultiSpeakMsgHeader» введено новое свойство, называемое «CustomerID», но атрибут в XML, который представляет это свойствонаходится в другом NameSpace
WSDL, с которым они мне предоставили работать (стандартный MultiSPeak WSDL), не генерирует это.
Я полагаю, что достаточно легко добавить «CustomerID» как строковое свойство к объекту MultiSpeakMsgHeader в reference.cs, но он не будет генерироваться с надлежащим оформлением xmlns и, следовательно, не будет работать (да,Я проверял это ... без пространства имен, без любви).
Я в растерянности.Я пытался настроить их WSDL и регенерировать, чтобы он заработал, но безуспешно.
Любые намеки, и я, безусловно, буду благодарен.Я уже слишком много времени потратил на эту проблему.
Спасибо всем.