На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> обмен данними с чужым сервисом
    здравствуйте господа

    стоит задача:
    связаться с сервисом, передать данные и получить ответ.
    дан адрес тестового сервиса. если в ИЕ набираю данный адрес, получаю следующее
    ExpandedWrap disabled
        <?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>

    и даны примеры. я должен отправить
    ExpandedWrap disabled
      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>

    и получу ответ
    ExpandedWrap disabled
      <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>

    тепер вопрос
    как все это организовать на шарпе? куда капать?
      самый простой способ - пусть студия или svcutil сгенерирует прокси. с wsdl сервисов должна генерить на ура

      Добавлено
      скорми им адрес wsdl сервиса
        GarF1eld спосибо.
        оказывется все очен просто :)
          у меня подобная задача, я сгенерировал прокси-класс test (отображается в Service Reference)...
          можете привести пример как с ним работать, чтобы получить данные...

          в ответ на такой запрос:
          ExpandedWrap disabled
            <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>


          я получаю след. ответ:
          ExpandedWrap disabled
            <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 прокси-класса.

          Я пробую делать так:
          ExpandedWrap disabled
                  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)
            Проблема решилась: вместо Service Reference используйте Web Reference
            web services, soap
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0295 ]   [ 18 queries used ]   [ Generated: 25.04.24, 15:19 GMT ]