Изменение пространства имен XML параметров на пустую строку для C # .NET Web Service - PullRequest
0 голосов
/ 14 марта 2019

Я написал веб-сервис на C # .NET как расширение уже существующего веб-приложения (.NET 3.5) для предоставления интерфейса для стороннего программного обеспечения.

Это описание моего веб-сервиса:

POST /someurl/somefile.asmx HTTP/1.1
Host: someserver
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/updateServiceOrder"

<?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>
    <updateServiceOrder xmlns="http://tempuri.org/">
      <VTID>int</VTID>
      <ExtID>string</ExtID>
      <FunctionCode>int</FunctionCode>
      <Status>int</Status>
      <FMExtID>string</FMExtID>
      <Termin_von>dateTime</Termin_von>
      <Termin_bis>dateTime</Termin_bis>
      <Plandauer>int</Plandauer>
      <Besuchsdauer>int</Besuchsdauer>
      <Planankunft>dateTime</Planankunft>
      <Infotext>string</Infotext>
    </updateServiceOrder>
  </soap:Body>
</soap:Envelope>

И вот как стороннее программное обеспечение пытается использовать веб-службу:

<soap:Envelope soap:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/ xmlns:soapenc=http://schemas.xmlsoap.org/soap/encoding/ 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>
      <updateServiceOrder xmlns="http://tempuri.org/">
         <VTID xmlns="">277</VTID>
         <ExtID xmlns="">1AB322823</ExtID>
         <FunctionCode xmlns="">3</FunctionCode>
         <Status xmlns="">2</Status>
         <FMExtID xmlns="">vinzenz.krenn</FMExtID>
         <Termin_von xmlns="">2019-03-14T00:00:00+01:00</Termin_von>
         <Termin_bis xmlns="">2019-03-14T00:00:00+01:00</Termin_bis>
         <Plandauer xmlns="">15</Plandauer>
         <Besuchsdauer xmlns="">15</Besuchsdauer>
         <Planankunft xmlns="">2019-03-14T09:05:00+01:00</Planankunft>
         <Infotext xmlns=""/>
      </updateServiceOrder>
   </soap:Body>
</soap:Envelope>

Проблема в том, что я не получаю никаких значений, когда стороннее программное обеспечение вызывает мою функцию веб-службы, т.е. все параметры кажутся пустыми.

Я заметил, что они добавляют xmlns = "" для каждого параметра, и я думаю, что это причина, почему я не получаю значения правильно, но, к сожалению, я понятия не имею, что я должен изменить чтобы иметь возможность правильно обрабатывать вызов (изменение вызова стороннего программного обеспечения - к сожалению - не вариант).

Мой код довольно прост и выглядит так:

using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Net;
using System.Web;
using System.Web.Services;

namespace somenamespace {

  [WebService(Description="Some WebService.")]
  public class SomeImport : System.Web.Services.WebService {

    /// <summary>
    /// Create a Object
    /// </summary>
    public SomeImport() {
      //CODEGEN: This call is required by the ASP.NET Web Services Designer
      InitializeComponent();
    }

  #region Component Designer generated code

    //Required by the Web Services Designer 
    private IContainer components = null;

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent() {
    }

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    protected override void Dispose( bool disposing ) {
      if(disposing && components != null) {
        components.Dispose();
      }
      base.Dispose(disposing);  
    }

  #endregion


    /// <summary>
    /// Schreibt Informationen aus Tool in den Serviceauftrag zurück.
    /// </summary>
    /// <param name="VTID">Interne ID</param>
    /// <param name="ExtID">Serviceauftragsnummer</param>
    /// <param name="FunctionCode">3: geändert, 2: gelöscht</param>
    /// <param name="Status">Obsolet</param>
    /// <param name="FMExtID">Techniker</param>
    /// <param name="Termin_von">Obsolet</param>
    /// <param name="Termin_bis">Obsolet</param>
    /// <param name="Plandauer">Einsatzdauer</param>
    /// <param name="Besuchsdauer">Obsolet</param>
    /// <param name="Planankunft">Einsatzdatum</param>
    /// <param name="Infotext">Infotext</param>
    /// <param name="Result">Result</param>
    [WebMethod]
    public void updateServiceOrder(int VTID,
                                   ref string ExtID,
                                   int FunctionCode,
                                   int Status,
                                   string FMExtID,
                                   DateTime Termin_von,
                                   DateTime Termin_bis,
                                   int Plandauer,
                                   int Besuchsdauer,
                                   DateTime Planankunft,
                                   ref string Infotext,
                                   out int Result)
    {
      try {
        Infotext = updateFromTool(VTID, ExtID, FunctionCode, FMExtID, Plandauer, Planankunft.ToString("dd.MM.yyyy hh:mm:ss"));
        Result = 0;
      } catch (Exception ex) {
        Result = 2;
        Infotext = ex.Message;
      } // try-catch
    } // updateServiceOrder
  }
}

Кто-нибудь может сказать мне, что я должен изменить, чтобы сделать эту работу? Или есть еще одна проблема, которую я полностью пропустил?

Заранее спасибо,

Clemens

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