Question

J'obtiens une erreur lorsque j'essaie d'utiliser le client de test WCF avec mon service WCF. Voici le code de service:

[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>

Je peux me connecter au service à l'aide du client de test WCF, mais lorsque j'essaie d'appeler GetEmployee (employeeNumber), l'erreur suivante apparaît:

Impossible d'appeler le service. Causes possibles: le service est hors ligne ou inaccessible; la configuration côté client ne correspond pas au proxy; le proxy existant est invalide. Reportez-vous à la trace de la pile pour plus de détails. Vous pouvez essayer de récupérer en lançant un nouveau proxy, en restaurant votre configuration par défaut ou en actualisant le service.

J'ai réussi à appeler ce service en envoyant une demande du navigateur.

Vous ne savez pas pourquoi je ne peux pas utiliser le client de test WCF?

Était-ce utile?

La solution

S'il vous plaît ignorer ma réponse précédente. Je ne pense pas que le problème se situe au niveau de la configuration côté client.

Voir Test WCF Client et WebHttpBinding .

  

Ceci est une limitation du Web   modèle de programmation lui-même. Contrairement à SOAP   points finaux (c'est-à-dire ceux avec   BasicHttpBinding, WSHttpBinding, etc.)   qui ont un moyen d'exposer les métadonnées   sur lui-même (WSDL ou Mex) avec   informations sur toutes les opérations /   paramètres dans le point final, il y a   actuellement aucun moyen standard d'exposer   métadonnées pour un noeud final non SOAP - et   c'est exactement ce que le   Les points de terminaison basés sur WebHttpBinding sont. Dans   Bref, le client de test WCF ne sera pas   utile pour les points de terminaison Web. Si   une norme pour représenter   les points de terminaison de style Web apparaissent lorsque WCF   expédie sa prochaine version, nous allons probablement   mettre à jour le client de test pour le prendre en charge,   mais pour l'instant il n'y en a pas largement   adopté.

Autres conseils

Je pense que votre configuration est incorrecte, vous devez ajouter le mode de sécurité des noeuds = " Aucun " et attribut bindingConfiguration = " NoneSecurity "

Modifiez ma configuration, essayez à nouveau:

<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.

le chemin dans mon cas:

   /opt/infamdm/hub/server/resources/cmxserver.properties
   /opt/infamdm/hub/cleanse/resources/cmxcleanse.properties
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top