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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top