Odpytuję sobie serwis (nie mój) używając przeglądarki - mam też dokumentację.
Chciałbym jednak podłączyć się "normalnie" do serwisu i odpalać metody. Zwykle robi się tak, że z menu kontekstowego wybiera się "Add Service Reference" i wklepuje adres. Jednakże w moim przypadku visual dostaje 400 Bad Request gdy próbuje uzyskać metadane.
Próbowałem połączyć się po HTTP i deserializować przez XmlSerializer oraz DataContractSerializer, ale xml który dostaję jest tak pokręcony, że co chwila mam jakieś problemy. A ponieważ ten serwis jest u mnie lokalnie i mam dostęp do jego dllek, próbowałem deserializować z użyciem "ich" typów. Bez powodzenia. Jakie to są problemy? W skrócie jest metoda serwisu:
[OperationContract]
[XmlSerializerFormat]
[FaultContract(typeof (StandardFault))]
[WebGet(UriTemplate = "Doors?sdKey={sdKey}")]
List<LightComponent<Door>> GetDoors(string sdKey);
Typ LightComponent<> implementuje IXmlSerializable
Xml jaki to wypluwa wygląda mniej więcej tak:
<ArrayOfLightComponentOfDoor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<LightComponentOfDoor>
<Session>OperatorSession</Session>
<ID>424</ID>
<Description>Controller #1 Door #1 (01.01)</Description>
<Object>12</Object>
<Owner>423</Owner>
<item>
<key>
<string>DESCRIPTION2</string>
</key>
<value>
<SmartLinkDataValue>
<Value>Controller #1 Door #1</Value>
</SmartLinkDataValue>
</value>
</item>
<item>
<key>
<string>ELEVATORCAB</string>
</key>
<value>
<SmartLinkDataValue>
<Value>0</Value>
</SmartLinkDataValue>
</value>
</item>
</LightComponentOfDoor>
</ArrayOfLightComponentOfDoor>
Jeżeli próbuję to deserializować DataContractSerializer to wywala się na tym, że obiekt ten nie jest we właściwym namespace, albo nie wie co to jest <string xmlns="....">, bo nie używa metody ReadXml interfejsu IXmlSerializable.
Jeżeli próbuję użyć XmlSerializer to znów nie rozpoznaje elementu ArrayOfLightComponentOfDoor - to jest, jak mi się wydaje, element typowy dla DataContractSerializer
Wygląda to jakby było pomieszanie serializacji DataContractSerializer i XmlSerializer. Czegoś tu po prostu chyba nie rozumiem. Czy ktoś zna temat i może mi przybliżyć od której strony się do tego zabrać?
Mam nadzieję, że przedstawiłem problem dość jasno.