Можно автоматически не удается отправить структурированных данных XML в веб-службы в InfoPath 2003

Поддержка Office 2003 завершена

8 апреля 2014 г. корпорация Майкрософт прекратила поддержку Office 2003. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 826989
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Проблема
При отправке данных из InfoPath форму, чтобы веб-службы с помощью встроенных InfoPath отправки, возможно возникновение следующих проблем:
  • Может появиться сообщение об ошибке. Появляется сообщение об ошибке, зависит от согласно информации, которая отправляется и для написания кода для метода, который вызывается на веб-службы.
  • Вы можете заметить, что некорректных данных отправляется веб-службы.
В данной статье также рассматриваются следующие:
  • Каким образом InfoPath отправляющей данные веб-службы.
  • Два метода для отправки содержимого формы InfoPath к веб-службы.
Причина
InfoPath при отправке данных на веб-службы, он отправляет содержимое узла XML, который был выбран в качестве параметра, но он не отправлять самого узла XML. Это обычно работает хорошо. Например, у метода веб-службы следующим образом:
[WebMethod]   public void SendSampleString( string sampleString )   {      //Do something interesting with the sample string.   } 
Если отправить следующий XML-элемента этот метод веб-службы,sampleStringпараметр заполняется"Hello, World!"(должным образом).
<sampleElement>"Hello, World!"</sampleElement>
К сожалению, это может затруднить для отправки XML-узлов или всей формы InfoPath к веб-службы. Например, у метода веб-службы следующим образом:
[WebMethod]   public string SendXMLElement( System.Xml.XmlElement theElement )   {      //Report how many children the submitted node had.      return "Node with " + theElement.ChildNodes.Count + " children submitted.";   }
Если отправить пример XML-элемента, этот метод с помощью встроенных InfoPath отправки, содержаниеtheElementпараметр приведут к ошибке. Данная ошибка возникает, если только содержимое элемента XML («Hello, World!»), передаются методу веб-службы. Так как строка не является допустимым элементом XML, .NET Framework создает сообщение об ошибке, появляется сообщение об ошибке в программе InfoPath.

Подобная проблема возникает при попытке отправить форму InfoPath целиком пример метода веб-службы. В этом случае InfoPath отправляет все дочерние узлы в форму InfoPath, но не отправлять корневого узла. Это приводит к нескольким верхнего уровня XML-узлов, отправляемая. Поскольку это также не является допустимым XML, .NET Framework выбирает первый XML-узла верхнего уровня и использует его какtheElementпараметр . Игнорируются все другие узлы, и таким образом внешний вид, что они не были отправлены.
Решение
Эта проблема будет исправлена в Microsoft Office 2003 с пакетом обновления 1 (SP1). Чтобы решить эту проблему, получите последний пакет обновления для Microsoft Office 2003.

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
870924Как получить последний пакет обновления для Office 2003
Временное решение
Для временного решения этой проблемы записи пользовательского отправить действие в сценарий. Можно использовать любой из следующих способов:
  • Использование дополнительного источника данных для выполнения операции отправки.
  • Написать код, который создает сообщение SOAP и отправляет его на веб-службы.

Использование дополнительного источника данных

  1. НаСредстваменю, нажмите кнопкуДополнительные источники данных.
  2. ВДополнительные источники данныхдиалоговое окно, нажмите кнопкуДобавить.
  3. На первой страницеМастер настройки источника данныхщелкнитеВеб-службы, а затем нажмите кнопкуСледующий.
  4. Введите расположение веб-службы, которые требуется отправить, а затем нажмите кнопкуСледующий.
  5. Выберите метод веб-службы, которые требуется использовать, а затем нажмите кнопкуСледующий.
  6. Когда InfoPath предлагает выбрать поле или группу из формы, которые будут использоваться для заполнения параметров метода веб-службы, оставьте поле пустым, параметры и нажмите кнопкуСледующий.
  7. Снимите"Подключение к этому дополнительному источнику данных при открытии формы"флажок в поле, нажмите кнопкуОкончание, а затем нажмите кнопкуОКЗакрытьДополнительные источники данныхдиалоговое окно.
  8. НаСредстваменю, нажмите кнопкуОтправка формы.
  9. ВОтправка формыдиалоговое окно, нажмите кнопкуВключение отправки.
  10. ВОтправитьсписок, нажмите кнопкуОтправка с помощью пользовательского сценария, а затем нажмите кнопкуОКЧтобы открыть редактор сценариев Microsoft.
  11. ВXDocument::OnSubmitRequestметод , используйте сценарий как следующий сценарий, чтобы отправить всю форму.

    ПримечаниеМожно также отправить отдельных элементов в форму.
    try{      //Get a reference to the SendXMLElement secondary data source.      var objSendXMLElement = XDocument.GetDOM("SendXMLElement");      objSendXMLElement.setProperty( "SelectionNamespaces",         'xmlns:s1="http://joelallxp.microsoft.com/schema" ' +         'xmlns:s0="http://tempuri.org/" ' +         'xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution"' );       //Remove any data from the SendXMLElement secondary data source.      var objData = objSendXMLElement.selectSingleNode(         "/dfs:myFields/dfs:queryFields/s0:SendXMLElement/s0:theElement");      var objCurrentData = objData.selectNodes("@* | node()");      objCurrentData.removeAll();       //Clone the XDocument.      var objClonedDocument = XDocument.DOM.documentElement.cloneNode(true );      objData.appendChild( objClonedDocument );         //Call the "Query" method of the secondary data source to send the data.      XDocument.DataObjects("SendXMLElement").Query();         //Report the results of the submit.      XDocument.UI.Alert(          objSendXMLElement.selectSingleNode(            "/dfs:myFields/dfs:dataFields/s0:SendXMLElementResponse/s0:SendXMLElementResult").text );      eventObj.ReturnStatus = true;   }   catch(ex)   {      eventObj.ReturnStatus = false;   }

Написание кода

  1. НаСредстваменю, нажмите кнопкуОтправка формы.
  2. ВОтправка формыдиалоговое окно, нажмите кнопкуВключение отправки.
  3. ВОтправитьсписок, нажмите кнопкуОтправка с помощью пользовательского сценария, а затем нажмите кнопкуОКЧтобы открыть редактор сценариев Microsoft.
  4. ВXDocument::OnSubmitRequestметод , используйте сценарий как следующий сценарий, чтобы отправить всю форму.

    ПримечаниеМожно также отправить отдельных элементов в форму.
    try   {       //Create a SOAP object.      var objSOAPConnector = new ActiveXObject("MSOSOAP.HttpConnector30");         //Set the EndPointURL property to point to the Web service.      objSOAPConnector.Property("EndPointURL") = "http://server/WebService1/Submit.asmx";       //Set the SoapAction property to point to the Web service method. You can find this URI       //in the WSDL file of the Web service.      objSOAPConnector.Property("SoapAction") = "http://tempuri.org/SendXMLElement";      objSOAPConnector.Connect();            //Begin construction of a SOAP message to send to the Web service.      objSOAPConnector.BeginMessage();       var objSOAPSerializer = new ActiveXObject("MSOSoap.SoapSerializer30");      objSOAPSerializer.Init( objSOAPConnector.InputStream );      objSOAPSerializer.startEnvelope();      objSOAPSerializer.startBody();       //Construct the structure that marks the method name and the parameter name       //that you are sending.      objSOAPSerializer.StartElement( "SendXMLElement", "http://tempuri.org/" );      objSOAPSerializer.StartElement( "theNode", "http://tempuri.org/" );       //Write out the XML of the document.      objSOAPSerializer.WriteXml( XDocument.DOM.documentElement.xml );       //Finish each element.      objSOAPSerializer.EndElement();      objSOAPSerializer.EndElement();       //Call EndMessage to complete the SOAP message and send it to the Web service method.      //This results in the Web service method being called.      objSOAPSerializer.endBody();      objSOAPSerializer.endEnvelope();       objSOAPConnector.EndMessage();       //Use a SoapReader to read the response from the Web service method .      var ResponseReader = new ActiveXObject("MSOSOAP.SoapReader30");      ResponseReader.Load( objSOAPConnector.OutputStream );       //If there was no error, return true.      if (ResponseReader.Fault != null)      {         eventObj.ReturnStatus = false;         throw "Error submitting data: " + ResponseReader.Fault.xml;      }      eventObj.ReturnStatus = true;   }    catch (ex)   {       XDocument.UI.Alert("Failed to submit document: " + ex.description);    }
Статус
Такое поведение предусмотрено при разработке.

Данное поведение является особенностью в Microsoft Office InfoPath 2003. Это поведение изменяется с Microsoft Office InfoPath 2003 с пакетом обновления 1.
Дополнительная информация

Действия для воспроизведения поведения

  1. Создать веб-службы, содержит следующие два метода:
    • Способ 1
      [WebMethod]   public void SendSampleString( string sampleString )   {      //Do something interesting with the sample string.   } 
    • Способ 2
      [WebMethod]   public string SendXMLElement( System.Xml.XmlElement theElement )   {      //Report how many children the submitted node had.      return "Node with " + theElement.ChildNodes.Count + " children submitted.";   }
  2. Проектирование новой формы InfoPath, выбравСоздать из источника данных.
  3. ВМастер настройки источника данныхвыберитеВеб-службы, а затем нажмите кнопкуСледующий.
  4. Нажмите кнопкуПолучение и отправка данных, а затем нажмите кнопкуСледующий.
  5. ДляПолучение данныхВеб-метода службы, выполните следующие действия:
    1. Введите URL-адрес веб-службы, созданные в более ранних версий и нажмите кнопкуСледующий.
    2. ВВыбор операциисписок, нажмите кнопкуSendXMLElement, а затем нажмите кнопкуСледующий.
  6. ДляОтправка данныхВеб-метода службы, выполните следующие действия:
    1. Введите URL-адрес веб-службы, созданные в более ранних версий и нажмите кнопкуСледующий.
    2. ВВыбор операциисписок, нажмите кнопкуSendXMLElement, а затем нажмите кнопкуСледующий.
  7. Нажмите кнопкуИзменитьКнопка выбора параметра для операции отправки.
  8. ВdataFieldsсписок, нажмите кнопкуSendXMLElementResultщелкнитеОК, а затем нажмите кнопкуСледующий.
  9. ВыберитеСначала представление данных, а затем нажмите кнопкуОкончаниеЗакрытьМастер настройки источника данныхдиалоговое окно.
  10. ДобавитьSendXMLElementResultполя в форме.
  11. Предварительный просмотр формы.
  12. ВОтправить XML-узел результатаэлемент управления, типHello, World!
  13. НаФайлменю, нажмите кнопкуОтправить.

    Появляется следующее сообщение об ошибке:
    Невозможно отправить форму.
    Отправки формы произошла ошибка.

    Показать сведения О:
    Ответ the SOAP указывает, что произошла ошибка:
    Серверу не удалось прочитать запрос.--> есть происходит ошибка в XML-документа (1,409).--> указанное приведение недопустимо.
  14. Закройте окно предварительного просмотра, а затем вернитесь формы в режиме конструктора.
Для решения этой проблемы используйте один из способов, перечисленных в разделе «Решение» этой статьи.

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 826989 — последний просмотр: 01/11/2015 05:20:23 — редакция: 4.0

Microsoft Office InfoPath 2003

  • kbnosurvey kbarchive kbtshoot kbprb kbbug kbmt KB826989 KbMtru
Отзывы и предложения
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)