Я написал веб-сервис на 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