2016-10-27 4 views
0

Я хочу передать список объектов в качестве входа в веб-службу. Я пришел к выводу, что мы не можем достичь этого, используя встроенную задачу веб-службы в SSIS. Поэтому я попробовал называть его скриптовой задачей, которая использует код C#. Я могу вызвать Java Web Service (SOAP) через скрипт Task. Я могу проверить, передав простые параметры, такие как строка, в метод веб-службы. Теперь я хочу передать список объектов в качестве параметра методу веб-службы. Для тестирования сначала я попытался передать объект. Класс в C# клиента, как показано нижеВызов метода веб-службы Java Soap с параметром объекта из C# Client

[Serializable] 
     public class Person 
     { 
      public string _PersonName; 
      public string _PersonNumber; 
      public string _Password; 
      public bool _isTrue; 
      public List<string> _configs; 
      public Person() 
      { 
      } 

      public Person(string PersonName, string PersonNumber, string Password, bool val) 
      { 
       _PersonName = PersonName; 
       _PersonNumber = PersonNumber; 
       _Password = Password; 
       _isTrue = val; 
       // _configs = config;   
      } 
     } 

соответствующий класс прокси-клиент, как показано ниже

public partial class person { 

     private string _PersonNameField; 

     private string _PersonNumberField; 

     private string _PasswordField; 

     private bool _isTrueField; 

     private string[] _configsField; 

     /// <remarks/> 
     [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
     public string _PersonName { 
      get { 
       return this._PersonNameField; 
      } 
      set { 
       this._PersonNameField = value; 
      } 
     } 

     /// <remarks/> 
     [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
     public string _PersonNumber { 
      get { 
       return this._PersonNumberField; 
      } 
      set { 
       this._PersonNumberField = value; 
      } 
     } 

     /// <remarks/> 
     [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
     public string _Password { 
      get { 
       return this._PasswordField; 
      } 
      set { 
       this._PasswordField = value; 
      } 
     } 

     /// <remarks/> 
     [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
     public bool _isTrue { 
      get { 
       return this._isTrueField; 
      } 
      set { 
       this._isTrueField = value; 
      } 
     } 

     /// <remarks/> 
     [System.Xml.Serialization.XmlElementAttribute("_configs", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)] 
     public string[] _configs { 
      get { 
       return this._configsField; 
      } 
      set { 
       this._configsField = value; 
      } 
     } 
    } 

метод в классе прокси находится ниже

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://sample.xyz.abc.ext/", ResponseNamespace="http://sample.xyz.abc.ext/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
     [return: System.Xml.Serialization.XmlElementAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
     public string createPerson([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] person arg0) { 
      object[] results = this.Invoke("createJigBoard", new object[] { 
         arg0}); 
      return ((string)(results[0])); 
     } 

Я звоню метод на клиенте ниже

ServiceReference.TestService per = new ServiceReference.TestService(); 
var testList=new List<string>(); 
Person personOne = new Person("Manoj", "123456761", "Administrator", true,testList); 
      NetworkCredential myCred = new NetworkCredential("person", "person"); 
      CredentialCache myCache = new CredentialCache(); 
      myCache.Add(new Uri("http://pcblr********:80/*******/servlet/TestService"), "Basic", myCred);    
      StringWriter textWriter = new StringWriter(); 
      XmlSerializer xmlSer = new XmlSerializer(typeof(Person));   
      xmlSer.Serialize(textWriter, personOne); 
         textWriter.Close(); 
      per.createPerson(personOne); 

Я получаю сообщение об ошибке

Argument 1: cannot convert from 'Client.Person' to 'Proxyclass.person' ******\ScriptMain.cs  

ответ

1

Сообщение об ошибке верное. Служба ожидает ProxyClass.person, но вы отправляете Client.Person.

Вместо этой линии:

Person personOne = new Person("Manoj", "123456761", "Administrator", true,testList); 

вы должны создать ProxyClass.person-объект и отобразить параметры вручную или использовать AutoMapper или аналогичный.

Кроме того, необходимо изменить сериализации из

XmlSerializer xmlSer = new XmlSerializer(typeof(Person)); 

в

XmlSerializer xmlSer = new XmlSerializer(typeof(ProxyClass.person)); 
+0

Спасибо. Теперь я могу передать один объект. Я хочу передать список , но он обрабатывается как массив объектов. Я изменил настройки, как показано ниже: http://stackoverflow.com/questions/24621993/solution-wont-build-because-it-cant-convert-from-service-generated-type-to-my –

+0

Веб-сервис автоматически позаботится сериализации. List.ToArray() работает отлично. –

 Смежные вопросы

  • Нет связанных вопросов^_^