none
Как задать входные параметры функции, описанные как (string @params) RRS feed

  • Общие обсуждения

  • В VS 2008 на C# был автоматически создан вебклиент на основании wsdl документа, т.е прокси класс со всеми методами вебсервиса. В этом прокси классе есть метод описанный как

            [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://iwayex.com/sob/api/literal#booker", RequestNamespace="http://iwayex.com/sob/api/literal", ResponseNamespace="http://iwayex.com/sob/api/literal", Use=System.Web.Services.Description.SoapBindingUse.Literal)]
            [return: System.Xml.Serialization.XmlElementAttribute("return")]
            public string booker(string @params) {
                object[] results = this.Invoke("booker", new object[] {
                            @params});
                return ((string)(results[0]));
            }

    Как мне задать входные параметры для вызова этого метода? Сигнатура метода выглядит так.

    public string booker(string params)

    После серриализации эти params должны превратиться в xml

    <Params>

      <Transaction></Transaction>

      <PriceID>6899</PriceID>

      <Price>54.69</Price>
      <DateArrival>2012-03-28 18:00</DateArrival>

      <DateDeparture></DateDeparture>
      <ArrivalNumber></ArrivalNumber><DepartureNumber>SW760</DepartureNumber>
      <Address>Ленина, 93</Address><LocationAddress></LocationAddress>
      <DestinationAddress></DestinationAddress><FirstName>Олег</FirstName>
      <LastName>Мотвеев</LastName><Phone>79137263762</Phone><Email>tetrad123@yandex.ru</Email>
      <Passangers>1</Passangers><Table></Table><Currency>EUR</Currency><Notes>Багаж</Notes>
      <PayableStatus>1</PayableStatus><SendParams></SendParams>

    </Params>

    Что должна содержать строка params?

    4 сентября 2014 г. 10:32

Все ответы

  • Судя по всему или обычную строку или строку XML, которая впоследствии будет десериализована на сервере.

    Сделаем содержимое сообщества лучше, вместе!

    7 сентября 2014 г. 9:43
    Модератор
  • xml-строка вызывает runtime error,

    Что Вы подразумеваете под обычной строкой?

    8 сентября 2014 г. 8:56
  • "xml-строка вызывает runtime error," - есть возможность посмотреть какая именно ошибка выдаётся?

    "Что Вы подразумеваете под обычной строкой?" - не XML строку.


    Сделаем содержимое сообщества лучше, вместе!

    8 сентября 2014 г. 8:58
    Модератор
  • Обычно инвок используют для генериков, может так? или я не понял вопроса
    public string booker<T>(params string[] param) where T : class, new()
            {
                var type = (new T() as object).GetType();
                var constructor = type.GetConstructor(Type.EmptyTypes);
                var result = constructor.Invoke(param);
    
                return (result as string);
            }


    if (Thread.Was == HelpFul) Mark.As(HelpFul); else if (Thread.Was == Answered) Mark.As(Answered); else Provide(More.Details);

    8 сентября 2014 г. 17:56
  • Provide(More.Details)
    9 сентября 2014 г. 16:17
  • Это вы должны Provide(More.Details)

    if (Thread.Was == HelpFul) Mark.As(HelpFul); else if (Thread.Was == Answered) Mark.As(Answered); else Provide(More.Details);

    11 сентября 2014 г. 6:12
  • Вылетает на строке

                object[] results = this.Invoke("booker", new object[] {
                            @params});

    Ошибка:

    Call to a member function convert() on a non-object

    11 сентября 2014 г. 8:56
  • Там в wsdl входные параметры не описаны, я такое первый раз вижу

    http://iwayex.com/sob/api/literalwsdl

    11 сентября 2014 г. 12:53
  • Я задала входные параметры. На них отладчик не ругается.

    Теперь он выдает SOAP-ERROR

    Где возникает ошибка, на стороне клиента или на стороне сервера?

    Как мне посмотреть SOAP message в XML, который я отсылаю?

    Как мне посмотреть ответ сервера в XML, который я получаю?

    Вот описание ошибки:

    System.Web.Services.Protocols.SoapHeaderException was unhandled
      Message="SOAP-ERROR: Encoding: Violation of encoding rules"
      Source="System.Web.Services"
      Actor=""
      Lang=""
      Node=""
      Role=""
      StackTrace:
           at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
           at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
           at IBFmain.iwayex.Booker_Sob_AmazingService.booker(Object[] params) in C:\Documents and Settings\44\Desktop\IBFmain\IBFmain\IBFmain\Web References\iwayex\Reference.cs:line 956
           at IBFmain.IWay.booker_Click(Object sender, EventArgs e) in C:\Documents and Settings\44\Desktop\IBFmain\IBFmain\IBFmain\IWay.cs:line 67
           at System.Windows.Forms.Control.OnClick(EventArgs e)
           at System.Windows.Forms.Button.OnClick(EventArgs e)
           at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           at System.Windows.Forms.Control.WndProc(Message& m)
           at System.Windows.Forms.ButtonBase.WndProc(Message& m)
           at System.Windows.Forms.Button.WndProc(Message& m)
           at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           at System.Windows.Forms.Application.Run(Form mainForm)
           at IBFmain.Program.Main() in C:\Documents and Settings\44\Desktop\IBFmain\IBFmain\IBFmain\Program.cs:line 20
           at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
           at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
           at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
           at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
           at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
           at System.Activator.CreateInstance(ActivationContext activationContext)
           at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
           at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Threading.ThreadHelper.ThreadStart()
      InnerException: 

    16 сентября 2014 г. 13:41