Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.140.198.43] |
|
Сообщ.
#1
,
|
|
|
здравствуйте господа
стоит задача: связаться с сервисом, передать данные и получить ответ. дан адрес тестового сервиса. если в ИЕ набираю данный адрес, получаю следующее <?xml version="1.0" encoding="UTF-8" ?> <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3.1-hudson-417-SNAPSHOT. --> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://-----" xmlns:ns="http://---" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="debtor" targetNamespace="http://----"> <types> <xsd:schema targetNamespace="http://----"> <xsd:import namespace="http://----" schemaLocation="http://----" /> </xsd:schema> </types> <message name="GetDebtorInfoRequest"> <part name="part1" type="ns:GetDebtorInfoRequest" /> </message> <message name="GetDebtorInfoResponse"> <part name="part2" type="ns:GetDebtorInfoResponse" /> </message> <message name="InformDebtorRequest"> <part name="part3" type="ns:InformDebtorActionRequest" /> </message> <message name="InformDebtorResponse"> <part name="part4" type="ns:InformDebtorActionResponse" /> </message> <message name="AuthorizationHeader"> <part name="AuthHeader" element="ns:AuthHeader" /> </message> <portType name="debtorPortType"> <operation name="GetDebtorInfo"> <input name="input1" message="tns:GetDebtorInfoRequest" /> <output name="output1" message="tns:GetDebtorInfoResponse" /> </operation> <operation name="InformDebtorAction"> <input name="input2" message="tns:InformDebtorRequest" /> <output name="output2" message="tns:InformDebtorResponse" /> </operation> </portType> <binding name="debtorBinding" type="tns:debtorPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="GetDebtorInfo"> <soap:operation /> <input name="input1"> <soap:body use="literal" namespace="http://----" /> <soap:header message="tns:AuthorizationHeader" part="AuthHeader" use="literal" /> </input> <output name="output1"> <soap:body use="literal" namespace="http://----" /> </output> </operation> <operation name="InformDebtorAction"> <soap:operation /> <input name="input2"> <soap:body use="literal" namespace="http://----" /> <soap:header message="tns:AuthorizationHeader" part="AuthHeader" use="literal" /> </input> <output name="output2"> <soap:body use="literal" namespace="http://----" /> </output> </operation> </binding> <service name="debtorService"> <port name="debtorPort" binding="tns:debtorBinding"> <soap:address location="http://----" /> </port> </service> </definitions> и даны примеры. я должен отправить GetDebtorInfo: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:deb="http://----" xmlns:deb1="http://----"> <soapenv:Header> <deb:AuthHeader> <deb:Username>CONST</deb:Username> <deb:Password>CONST</deb:Password> </deb:AuthHeader> </soapenv:Header> <soapenv:Body> <deb1:GetDebtorInfo> <part1> <deb:IdNumber>21001005733</deb:IdNumber> </part1> </deb1:GetDebtorInfo> </soapenv:Body> </soapenv:Envelope> и получу ответ <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:GetDebtorInfoResponse xmlns:ns2="http://----" xmlns:ns3="http://----"> <part2> <ns3:IdNumber>00000000000</ns3:IdNumber> <ns3:ResponseStatusId>1</ns3:ResponseStatusId> <ns3:ResponseStatusText>Was found</ns3:ResponseStatusText> <ns3:DebtorRecords> <ns3:Record> <ns3:RegNumber>00000000000</ns3:RegNumber> <ns3:RegDate>2009-12-09T14:04:32.000+04:00</ns3:RegDate> <ns3:DebtorName>хххххх ххххххх</ns3:DebtorName> <ns3:DebtorIdNumber>00000000000</ns3:DebtorIdNumber> <ns3:DocumentList> <ns3:Document> <ns3:Initiator>ххххххх</ns3:Initiator> <ns3:DocNo>1111</ns3:DocNo> <ns3:DocDate>2009-12-09T00:00:00.000+04:00</ns3:DocDate> <ns3:DocName>ххххх</ns3:DocName> </ns3:Document> </ns3:DocumentList> <ns3:Author> <ns3:PersonName>хххххххх</ns3:PersonName> <ns3:Phone>хххххх</ns3:Phone> <ns3:Address>хххххх</ns3:Address> </ns3:Author> </ns3:Record> </ns3:DebtorRecords> </part2> </ns2:GetDebtorInfoResponse> </S:Body> </S:Envelope> тепер вопрос как все это организовать на шарпе? куда капать? |
Сообщ.
#2
,
|
|
|
самый простой способ - пусть студия или svcutil сгенерирует прокси. с wsdl сервисов должна генерить на ура
Добавлено скорми им адрес wsdl сервиса |
Сообщ.
#3
,
|
|
|
GarF1eld спосибо.
оказывется все очен просто |
Сообщ.
#4
,
|
|
|
у меня подобная задача, я сгенерировал прокси-класс test (отображается в Service Reference)...
можете привести пример как с ним работать, чтобы получить данные... в ответ на такой запрос: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cm="http://company.ru/cm"> <soapenv:Header/> <soapenv:Body> <cm:SimpleSearchQuery> <cm:searchExpression> /Bank[@docNumber="555"] </cm:searchExpression> </cm:SimpleSearchQuery> </soapenv:Body> </soapenv:Envelope> я получаю след. ответ: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"> <soapenv:Header> <wsa:MessageID soapenv:mustUnderstand="0">uuid:123456789-0c222-1234-a123-bddbbddbbbbb</wsa:MessageID> <wsa:To soapenv:mustUnderstand="0">http://www.sonicsw.com/esb/replyto-destination-required</wsa:To> <wsa:Action soapenv:mustUnderstand="0">http://company.ru/webservice/BPMPortType/SimpleSearchResponse</wsa:Action> <wsa:From soapenv:mustUnderstand="0" xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"> <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address> </wsa:From> </soapenv:Header> <soapenv:Body> <cm:SimpleSearchResult xmlns:cm="http://company.ru/cm"> <ArrayOfItems> <ns1:Item URI="http://117.17.117.7/CMBSpecificWebService/CMBGetPIDUrl?pid=55 1 ICM8 icmnlsdb9 Bank59 26 A100... A11... 14 1234&server=icmnlsdb&dsType=ICM" xmlns="http://www.ibm.com/xmlns/db2/cm/beans/1.0/schema" xmlns:ns1="http://www.ibm.com/xmlns/db2/cm/beans/1.0/schema"> <ns1:ItemXML> <ns1:Financial DM_Class="Банковские документы" DM_State="Введен" FileName="Квитанция 5.pdf" Filial="Головной офис" Title="Квитанция к запросу" cm:PID="55 3 ICM8 icmnlsdb9 Bank59 26 A100... A11... 14 1234" docCategory="Касса" docDate="2010-08-02" docLocation="Центральный офис" docNumber="555" docNumber="555" docSum="100.00" docType="Квитанция 5" orderSum="100.00" xmlns:cm="http://www.ibm.com/xmlns/db2/cm/api/1.0/schema"> <cm:properties type="document"> <cm:lastChangeUserid value="PUPKIN"/> <cm:lastChangeTime value="2011-03-16T13:39:09.451"/> <cm:createUserid value="PUPKIN"/> <cm:createTime value="2011-03-16T13:39:09.451"/> <cm:semanticType value="1"/> <cm:ACL name="PublicReadACL"/> <cm:lastOperation name="RETRIEVE" value="SUCCESS"/> </cm:properties> <ns1:ICMBASE cm:PID="55 3 ICM8 icmnlsdb7 ICMBASE58 26 A100... A11C16B63909E388691 13 300" cm:partNumber="1"> <cm:properties type="item" xsi:type="cm:partPropertyType"> <cm:lastChangeUserid value="PUPKIN"/> <cm:lastChangeTime value="2011-03-16T13:39:09.451"/> <cm:createUserid value="PUPKIN"/> <cm:createTime value="2011-03-16T13:39:09.451"/> <cm:semanticType value="128"/> <cm:ACL name="PublicReadACL"/> <cm:lastOperation name="RETRIEVE" value="SUCCESS"/> </cm:properties> <cm:resourceObject MIMEType="application/pdf" RMName="rmdb" SMSCollName="CBR.CLLCT001" externalObjectName="" originalFileName="Квитанция 5.pdf" resourceFlag="2" resourceName="" size="28900"> <cm:URL value="http://testhq.ru:9080/icmrm/ICMResourceManager/Квитанция 5.pdf?order=retrieve&item-id=A1001001A1155555555555501111&version=1&collection=CBR.CLLCT001&libname=icmnlsdb&update-date=2011-03-16+13%3A39%3A09.451764&token=A4E6.HP86XE6_f0_gZuQv6yU;&content-length=0"/> </cm:resourceObject> </cm:resourceObject> </ns1:ICMBASE> </ns1:Bank> </ns1:ItemXML> </ns1:Item> </ArrayOfItems> </cm:SimpleSearchResult> </soapenv:Body> </soapenv:Envelope> Как вытащить данные (внутренности <ArrayOfItems>...</ArrayOfItems>)? Прикрепил скрин со структурой сгенерированного в VS прокси-класса. Я пробую делать так: String testService = "http://externalserver.ru:2584/wsdl/integration/services/CMInt_1-0"; String prodService = null; // создаем объект-клиент рокси сервера test.BPMPortTypeClient client = new test.BPMPortTypeClient(); client.Open(); // запрос test.SimpleSearchQuery q = new test.SimpleSearchQuery(); q.searchExpression = "/Bank[@docNumber = 555]"; // для хранения результата test.SimpleSearchResult res = null; // Выполняем метод SimpleSearch res = client.SimpleSearch(q); if (res != null) { //parseResult(res); System.Xml.XmlElement[] fields = res.Any; foreach (XmlElement field in fields) Console.WriteLine(field.Value); } else Console.WriteLine("res is null"); client.Close(); но ничего не выходит - не могу получить данные((( System.Xml.XmlElement[] fields походу пуст Прикреплённый файлvv.PNG (26,05 Кбайт, скачиваний: 519) |
Сообщ.
#5
,
|
|
|
Проблема решилась: вместо Service Reference используйте Web Reference
web services, soap |