c # Веб-сервис для обработки повторяющихся / нескольких элементов - PullRequest
0 голосов
/ 13 июня 2018

Я новичок в использовании Webservice.Я реализовал действие мыльной почты для внешней компании.Работает отлично.Теперь я хочу начать создавать свои собственные, чтобы люди общались с нами.Я создал базовый сервис добавления как все учебные пособия и т. Д.

Теперь я хочу создать сервис, с которого вы размещаете заказы.В настоящее время я просто записываю заказ в текстовый файл с номером заказа в качестве имени файла.Начал тестирование работы с отправкой всего 1 элемента.Но я хочу, чтобы они передали его с несколькими предметами по вызову.Вот что я получил сейчас.

c #

   public struct OrderSystem
    {

        public string ResultMsg;
    }


[WebMethod(MessageName = "Submit Order", Description = "Submit Order")]
public OrderSystem Order(string Custnr,string POnr, string[] Item , int[] qty)
{ 
    using (System.IO.StreamWriter file =
        new System.IO.StreamWriter(@"C:\Users\Public\TestFolder\"+POnr+".txt"))
    {
                file.WriteLine(Custnr);
                file.WriteLine(POnr);

                for (int i =0; i< Item.Length; i++)
                {
                    file.WriteLine("LineItem" + i +Item[i] + " | "+qty[i]);
                }  
    }

    OrderSystem result;

        result.ResultMsg = "Complete";
        return (result);

}

Текущий способ XML это назвать.Им не очень удобно создавать Call to me

POST /Orders.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/Submit Order"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Submit_x0020_Order xmlns="http://tempuri.org/">
      <Custnr>string</Custnr>
      <POnr>string</POnr>
      <Item>
        <string>string</string>
        <string>string</string>
      </Item>
      <qty>
        <int>int</int>
        <int>int</int>
      </qty>
    </Submit_x0020_Order>
  </soap:Body>
</soap:Envelope>

Как я хочу создать файл вызова xml для просмотра.

POST /Orders.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/Submit Order"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Submit_x0020_Order xmlns="http://tempuri.org/">
      <Custnr>000223</Custnr>
      <POnr>988590</POnr>
      <ItemList>
        <Item>
            <ItemNr>1</Item>
            <Item>ABC123</Item>
            <Qty>2</Qty>
        </Item>
                <Item>
            <ItemNr>2</Item>
            <Item>ASC123</Item>
            <Qty>45</Qty>
        </Item>
                <Item>
            <ItemNr>3</Item>
            <Item>XYZKKF</Item>
            <Qty>4</Qty>
        </Item>
                <Item>
            <ItemNr>4</Item>
            <Item>FGH789</Item>
            <Qty>6</Qty>
        </Item>

      </ItemList>

    </Submit_x0020_Order>
  </soap:Body>
</soap:Envelope>

Как я могу сделать это и изменить свой C #Служба для обработки этого XML-файла.

Заранее благодарим Вас

1 Ответ

0 голосов
/ 13 июня 2018

Прежде всего, не создавайте новые сервисы с использованием ASMX в 2018 году. Это было устарело уже пару лет .Используйте WCF или Web API.

Решение применимо ко всем технологиям.Просто создайте класс:

public class Item
{
    public string ItemNr { get; set; }
    public int Quantity { get; set; }
}

И пусть ваш сервис примет список этого класса.

...