Вопрос

У меня есть веб -сервис SOAP, основанный на схеме XSD (схема генерировала классы, которые использовались в качестве параметра ввода для метода веб -службы), как таковая:

public class CMService : WebService
{
    [WebMethod(Description = "Submit trades")]
    public bool SubmitTrades(List<TradesTrade> trades)
    {
        // Validation, if true, return true, else, return false;
        return true;
    }
}

Как я могу подтвердить, было принято против схемы (в этом случае класс схемы Торговые)?

Спасибо.

Это было полезно?

Решение 2

Вместо вручную проверять поля :)

Другие советы

Это нелегко сделать это, и может быть не стоит.

Учтите, что если XML, отправляемый в ваш сервис, не соответствует схеме, то он не понизится должным образом. Если это достаточно плохо, ваша услуга даже не будет вызвана.

Тем не менее, если вам действительно нужно это сделать, то вы должны посмотреть на пример Soapextension учебный класс. Я рекомендую вам сначала получить пример, работающий точно так же. Затем я рекомендую вам создать новую версию примера и сделать его то, что вы хотите.

Вы хотите изменить методы writeinput и/или writeoutput для проверки вашего XML, используя один из доступных методов, возможно, путем настройки XMLreader для выполнения проверки и для чтения из входного потока; и настройка XMLWrite для записи в выходной поток; и затем запустить цикл, чтобы прочитать с ввода и записать на вывод.

я использовал XML Beans (XML -плавная структура) в моем предыдущем проекте. Мы создали схему XML, а затем сгенерировали объект XML Beans из схемы. Эти объекты XML Feans имеют много удобных методов для проверки достоверности XML и значений, передаваемых как часть XML.

Пожалуйста, дайте мне знать, если у вас есть какой -либо конкретный вопрос о XML Beans.

У меня была такая же проблема, ответ в том, что можно сделать это без необходимости вручную проверять все поля (что склонно к ошибкам, плюс, поскольку у вас уже есть схема, вы также можете использовать ее).

Смотрите это статью по теме.

По сути, процесс следования - сначала прочитать оригинал Request.inputStream в XMLDOCUMENT, а затем примените свою схему и валидацию к телу мыла внутри него.

[WebMethod(Description = "Echo Soap Request")]
public XmlDocument EchoSoapRequest(int input)
{
  // Initialize soap request XML
  XmlDocument xmlSoapRequest = new XmlDocument();
  XmlDocument xmlSoapRequestBody = new XmlDocument();

  // Get raw request body
  HttpContext httpContext = HttpContext.Current;
  Stream receiveStream = httpContext.Request.InputStream

  // Move to begining of input stream and read
  receiveStream.Position = 0;
  using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
  {
    // Load into XML document
    xmlSoapRequest.Load(readStream);
  }

  // Now we have the original request, strip out the request body
  foreach (XmlNode node in xmlSoapRequest.DocumentElement.ChildNodes)
  {
     if (node.NodeType == XmlNodeType.Element && node.LocalName == "Body" && node.FirstChild != null)
     {
        xmlSoapRequestBody.LoadXml(node.FirstChild.InnerXml);
     }
  }

  // Validate vs Schema
  xmlSoapRequestBody.Schemas.Add("http://contoso.com", httpContext.Server.MapPath("MySchema.xsd"))
  xmlSoapRequestBody.Validate(new ValidationHandler(MyValidationMethod));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top