Задача процесса SSIS для сценария Powershell, выполняющего вызов SOAP - PullRequest
1 голос
/ 23 апреля 2019

После долгих часов исследования проблемы я наткнулся на стенку.По сути, я пытаюсь сделать SOAP-вызов доступной веб-службы (для которой у меня есть WSDL).Я могу запустить свой сценарий PowerShell, чтобы сделать вызов и возвращает результат XML.У меня проблемы с подключением к SSIS и передачей этого XML для анализа.Я прочитал статьи, объясняющие, как сделать это через веб-сервис (который я получаю сообщение об ошибке на веб-метод) и сценарий / процесс задачи.

В настоящее время работает с задачей процесса, которая вызывает скрипт PowerShell для выполнения вызова SOAP и получения ответа XML, который я могу проанализировать и вставить в таблицу SQL

VB-код задачи процесса / веб-службы / сценария(неопытный в) PowerShell для сохранения ответа в файл и вставки в SQL

#setting TLS to 1.2 as webservice rejects 1.0
[System.Net.ServicePointManager]::SecurityProtocol = 
[System.Net.SecurityProtocolType]::Tls12

#setting URL Endpoint
$uri = "WebserviceURL"

#structuring the request with the infile being the soap action with headers
$post = Invoke-WebRequest -Uri $uri -InFile c:\SOAPREQUESTACTION -ContentType "text/xml" -method post`

Ожидаемые результаты - SSIS может анализировать ответ XML в переменные и вставлять в таблицу SQL, после чего он будет обновлять элементы какатрибуты меняются при следующем вызове SOAP

пример ответа

<?xml version='1.0' encoding='UTF-8'?><env:Envelope 
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body> 
<wd:Report_Data xmlns:wd="WEBSERVICEURN">
<wd:Report_Entry>
<wd:Preferred_Name_-_First_Name>Joe</wd:Preferred_Name_-_First_Name>
<wd:Preferred_Name_-_Last_Name>Professional</wd:Preferred_Name_- 
_Last_Name>
<wd:businessTitle>Joe Professional Title</wd:businessTitle>
<wd:Department wd:Descriptor="Joes Professional Department">
</wd:Report_Entry></wd:Report_Data></env:Body></env:Envelope>

1 Ответ

0 голосов
/ 24 апреля 2019

Прежде всего мне пришлось очистить ваш XML до:

<?xml version='1.0' encoding='UTF-8'?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body> 
<wd:Report_Data xmlns:wd="WEBSERVICEURN">
<wd:Report_Entry>
<wd:Preferred_Name_-_First_Name>Joe</wd:Preferred_Name_-_First_Name>
<wd:Preferred_Name_-_Last_Name>Professional</wd:Preferred_Name_-_Last_Name>
<wd:businessTitle>Joe Professional Title</wd:businessTitle>
<wd:Department wd:Descriptor="Joes Professional Department"/>
</wd:Report_Entry></wd:Report_Data></env:Body></env:Envelope>

Я предполагаю, что он загружен в файл.Я назвал этот файл xml.txt

  1. Добавить поток данных
  2. В поток данных добавить компонент сценария (источник)
  3. Добавить столбцы для вывода
  4. Редактировать скрипт
  5. Добавить в пространства имен
  6. с использованием System.Xml.Serialization;
  7. с использованием System.Collections.Generic;
  8. добавить следующеекод для CreateOutputRows ()

    var xml = System.IO.File.ReadAllBytes(@"D:\temp\xml.txt");
    System.IO.Stream s_xml = new System.IO.MemoryStream(xml);
    
    XmlSerializer serializer = new XmlSerializer(typeof(Envelope));
    var results = (Envelope)serializer.Deserialize(s_xml);
    foreach (var entry in results.Body.Report_Data.Report_Entry)
    {
        Output0Buffer.AddRow();
        Output0Buffer.fname = entry.Preferred_Name__First_Name;
        Output0Buffer.lname = entry.Preferred_Name__Last_Name;
        Output0Buffer.title = entry.BusinessTitle;
        Output0Buffer.dept = entry.Department.Descriptor;
    }
    s_xml.Close();
    
  9. Используйте веб-сайт, такой как xml2csharp.com, для преобразования xml в классы и вставки следующих классов:

     [XmlRoot(ElementName = "Department", Namespace = "WEBSERVICEURN")]
     public class Department
     {
          [XmlAttribute(AttributeName = "Descriptor", Namespace = "WEBSERVICEURN")]
          public string Descriptor { get; set; }
     }
    
     [XmlRoot(ElementName = "Report_Entry", Namespace = "WEBSERVICEURN")]
     public class Report_Entry
     {
          [XmlElement(ElementName = "Preferred_Name_-_First_Name", Namespace = "WEBSERVICEURN")]
          public string Preferred_Name__First_Name { get; set; }
          [XmlElement(ElementName = "Preferred_Name_-_Last_Name", Namespace = "WEBSERVICEURN")]
          public string Preferred_Name__Last_Name { get; set; }
          [XmlElement(ElementName = "businessTitle", Namespace = "WEBSERVICEURN")]
          public string BusinessTitle { get; set; }
          [XmlElement(ElementName = "Department", Namespace = "WEBSERVICEURN")]
          public Department Department { get; set; }
     }
    
     [XmlRoot(ElementName = "Report_Data", Namespace = "WEBSERVICEURN")]
     public class Report_Data
     {
           [XmlElement(ElementName = "Report_Entry", Namespace = "WEBSERVICEURN")]
           public List<Report_Entry> Report_Entry { get; set; }
           [XmlAttribute(AttributeName = "wd", Namespace = "http://www.w3.org/2000/xmlns/")]
           public string Wd { get; set; }
      }
    
      [XmlRoot(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
      public class Body
      {
           [XmlElement(ElementName = "Report_Data", Namespace = "WEBSERVICEURN")]
           public Report_Data Report_Data { get; set; }
      }
    
      [XmlRoot(ElementName = "Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
      public class Envelope
      {
            [XmlElement(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
            public Body Body { get; set; }
            [XmlAttribute(AttributeName = "env", Namespace = "http://www.w3.org/2000/xmlns/")]
            public string Env { get; set; }
      }
    
  10. Сохраните и выйдите из системы

  11. Теперь у вас есть столбцы в потоке данных, чтобы делать все, что вы хотите.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...