Errore client test WCF: impossibile richiamare il servizio
-
03-07-2019 - |
Domanda
Ricevo un errore quando provo ad usare il client di prova WCF con il mio servizio WCF. Ecco il codice del servizio:
[ServiceContract]
public interface IEmployeeService
{
[OperationContract(Name = "GetEmployee")]
[WebGet(RequestFormat = WebMessageFormat.Xml,
UriTemplate = "/Employees/{employeeNumber}")]
Employee GetEmployee(string employeeNumber);
}
public Employee GetEmployee(string employeeNumber)
{
var employeeNumberValue = Convert.ToInt32(employeeNumber);
var employee = DataProvider.GetEmployee(employeeNumberValue);
return employee;
}
<system.serviceModel>
<services>
<service name="Employees.Services.EmployeeService"
behaviorConfiguration="metaBehavior">
<endpoint address=""
behaviorConfiguration="webHttp"
binding="webHttpBinding"
contract="Employees.Services.IEmployeeService">
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange">
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metaBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Sono in grado di connettermi al servizio utilizzando WCF Test Client, ma quando provo a richiamare GetEmployee (employeeNumber) viene visualizzato il seguente errore:
Impossibile richiamare il servizio. Possibili cause: il servizio è offline o inaccessibile; la configurazione lato client non corrisponde al proxy; il proxy esistente non è valido. Fare riferimento alla traccia dello stack per maggiori dettagli. Puoi provare a ripristinare avviando un nuovo proxy, ripristinando la configurazione predefinita o aggiornando il servizio.
Sono stato in grado di chiamare con successo questo servizio inviando una richiesta dal browser.
Qualche idea sul perché non riesco a utilizzare il client di prova WCF?
Soluzione
Per favore ignora la mia risposta precedente. Non credo che il problema sia nella configurazione lato client.
Vedi Test WCF Client e WebHttpBinding .
Questa è una limitazione del web modello di programmazione stesso. A differenza di SAPONE endpoint (ovvero, quelli con BasicHttpBinding, WSHttpBinding, ecc.) che hanno un modo per esporre i metadati su se stesso (WSDL o Mex) con informazioni su tutte le operazioni / parametri nell'endpoint, c'è attualmente non esiste un modo standard per esporre metadati per un endpoint non SOAP - e questo è esattamente ciò che il Gli endpoint basati su webHttpBinding sono. Nel in breve, il client di test WCF non lo sarà utile per endpoint basati sul web. Se alcuni standard per la rappresentazione gli endpoint in stile Web emergono quando WCF spedirà la sua prossima versione, probabilmente aggiorna il client di prova per supportarlo, ma per ora non ce n'è nessuno ampiamente adottato.
Altri suggerimenti
Penso che la tua configurazione sia sbagliata, dovresti aggiungere la modalità di sicurezza del nodo = " Nessuno " e attributo bindingConfiguration = " NoneSecurity "
Cambia come mia configurazione, riprova:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="NoneSecurity"
maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
<readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
<security mode="None"/>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="Elong.GlobalHotel.Host.IHotelAPIBehavior"
name="Elong.GlobalHotel.Host.IHotelAPI">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="NoneSecurity" contract="Elong.GlobalHotel.Host.IIHotelAPI">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Elong.GlobalHotel.Host.IHotelAPIBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
I had a similar problem, the solution was in a minor error in the message alias ... that very generic message ... in our case was assigned a Boolean false if the right is true.
This value was in the MDM application that was running on websphere.
il percorso nel mio caso:
/opt/infamdm/hub/server/resources/cmxserver.properties
/opt/infamdm/hub/cleanse/resources/cmxcleanse.properties