【发布时间】:2023-03-03 21:53:01
【问题描述】:
我正在尝试在 ASP.NET Core 中实现 SOAP Web 服务。我使用dotnet svcutil 生成了代理代码,并使用 SoapUI 生成了一个示例请求。
问题是每当我尝试将请求发布到我的服务时,我得到的请求对象不是空的,但它的所有值都是空的。具体来说,我正在使用此类的对象对其进行测试:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.3")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="riceviPrenotazione", WrapperNamespace="http://farpresa.esterni.ised.it/", IsWrapped=true)]
public partial class riceviPrenotazioneRequest
{
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://farpresa.esterni.ised.it/", Order=0)]
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public prenotazione arg0;
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://farpresa.esterni.ised.it/", Order=1)]
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public infoUtente arg1;
public riceviPrenotazioneRequest()
{
}
public riceviPrenotazioneRequest(prenotazione arg0, infoUtente arg1)
{
this.arg0 = arg0;
this.arg1 = arg1;
}
}
这是代理实现:
public class FederFarma : FarPreSaEsterniWs
{
public Task<riceviPrenotazioneResponse> riceviPrenotazione(riceviPrenotazioneRequest request)
{
// code...
}
public Task<eliminaPrenotazioneResponse> eliminaPrenotazione(eliminaPrenotazioneRequest request)
{
// code...
}
public Task<verificaDisponibilitaResponse> verificaDisponibilita(verificaDisponibilitaRequest request)
{
// code...
}
}
被调用的函数是第一个函数 (riceviPrenotazione)。它的参数(request)不为空,但arg0和arg1为空。
这是我的界面:
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.3")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://farpresa.esterni.ised.it/", ConfigurationName="FarPreSaEsterniWs")]
public interface FarPreSaEsterniWs
{
[System.ServiceModel.OperationContractAttribute(Action="http://farpresa.esterni.ised.it/FarPreSaEsterniWs/riceviPrenotazioneRequest", ReplyAction="http://farpresa.esterni.ised.it/FarPreSaEsterniWs/riceviPrenotazioneResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
System.Threading.Tasks.Task<riceviPrenotazioneResponse> riceviPrenotazione(riceviPrenotazioneRequest request);
[System.ServiceModel.OperationContractAttribute(Action="http://farpresa.esterni.ised.it/FarPreSaEsterniWs/eliminaPrenotazioneRequest", ReplyAction="http://farpresa.esterni.ised.it/FarPreSaEsterniWs/eliminaPrenotazioneResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
System.Threading.Tasks.Task<eliminaPrenotazioneResponse> eliminaPrenotazione(eliminaPrenotazioneRequest request);
[System.ServiceModel.OperationContractAttribute(Action="http://farpresa.esterni.ised.it/FarPreSaEsterniWs/verificaDisponibilitaRequest", ReplyAction="http://farpresa.esterni.ised.it/FarPreSaEsterniWs/verificaDisponibilitaResponse")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
System.Threading.Tasks.Task<verificaDisponibilitaResponse> verificaDisponibilita(verificaDisponibilitaRequest request);
}
这是我通过 SoapUI 发送的 XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:far="http://farpresa.esterni.ised.it/">
<soapenv:Header/>
<soapenv:Body>
<far:riceviPrenotazione>
<!--Optional:-->
<arg0>
<!--Optional:-->
<anagrafica>
<!--Optional:-->
<cellulare>3333333333</cellulare>
<codice>123</codice>
<!--Optional:-->
<codiceFiscale>RSSMRA01A00L885A</codiceFiscale>
<!--Optional:-->
<cognome>Rossi</cognome>
<!--Optional:-->
<comuneDiNascita>
<!--Optional:-->
<codice>L885</codice>
<!--Optional:-->
<descrizione>Vignola</descrizione>
<!--Optional:-->
<fiscale>L885</fiscale>
<!--Optional:-->
<nazione>
<!--Optional:-->
<codice>ITA</codice>
<!--Optional:-->
<descrizione>Italia</descrizione>
<!--Optional:-->
<fiscale>ITA</fiscale>
</nazione>
<!--Optional:-->
<provincia>MO</provincia>
<!--Optional:-->
<regione>
<!--Optional:-->
<codice>ER</codice>
<!--Optional:-->
<descrizione>Emilia-Romagna</descrizione>
</regione>
</comuneDiNascita>
<!--Optional:-->
<domicilioCap>41057</domicilioCap>
<!--Optional:-->
<domicilioComune>
<!--Optional:-->
<codice>F257</codice>
<!--Optional:-->
<descrizione>Modena</descrizione>
<!--Optional:-->
<fiscale>F257</fiscale>
<!--Optional:-->
<nazione>
<!--Optional:-->
<codice>ITA</codice>
<!--Optional:-->
<descrizione>Italia</descrizione>
<!--Optional:-->
<fiscale>ITA</fiscale>
</nazione>
<!--Optional:-->
<provincia>MO</provincia>
<!--Optional:-->
<regione>
<!--Optional:-->
<codice>ER</codice>
<!--Optional:-->
<descrizione>Emilia-Romagna</descrizione>
</regione>
</domicilioComune>
<!--Optional:-->
<domicilioIndirizzo>Via Finta, 12</domicilioIndirizzo>
<!--Optional:-->
<nome>Mario</nome>
<!--Optional:-->
<sesso>M</sesso>
</anagrafica>
<!--Optional:-->
<codice>111</codice>
<!--Optional:-->
<!--Zero or more repetitions:-->
<listaPrenotato>
<!--Optional:-->
<prestazione>
<!--Optional:-->
<codice>222</codice>
<!--Optional:-->
<codiceRegionale>222</codiceRegionale>
<!--Optional:-->
<descrizione>Niente di che</descrizione>
<!--Optional:-->
<specialita>Nullafacentismo</specialita>
</prestazione>
<prezzoUnitario>10</prezzoUnitario>
<quantita>1</quantita>
</listaPrenotato>
<!--Optional:-->
<NRE>080A01234567890</NRE>
<!--Optional:-->
<note>Boh</note>
<prezzoTotale>10</prezzoTotale>
</arg0>
<!--Optional:-->
<arg1>
<!--Optional:-->
<nomeUtente>username</nomeUtente>
<!--Optional:-->
<password>password</password>
</arg1>
</far:riceviPrenotazione>
</soapenv:Body>
</soapenv:Envelope>
根据我在网上找到的内容,这似乎是一个命名空间问题,但在我看来所有命名空间都可以 - SoapUI 与自动生成的类一致,最重要的是它们是从相同的 WSDL 生成的,没有被修改。可能是什么原因?
【问题讨论】:
-
你是如何在 .net core 中实现 SOAP 服务的?与我们分享.net 核心中的soap 服务。你关注Custom ASP.NET Core Middleware Example吗?
-
我正在使用一个名为 SoapCore 的 NuGet 包。它需要您做的就是在配置期间添加 SOAP 服务,如下所示:(在 ConfigureServices 中)ˋservices.AddSingleton
();ˋ(在 Configure 中)ˋapp.UseSoapEndpoint ("/ServicePath.svc", new BasicHttpBinding());ˋ -
服务定义是什么?与我们分享与服务相关的代码。
标签: soap asp.net-core wsdl soapui