Pergunta

Estou recebendo um erro ao tentar usar o Teste de Cliente WCF com meu serviço WCF. Aqui está o código de serviço:

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

Eu sou capaz de se conectar ao serviço usando o cliente de teste do WCF, mas quando tento invocar comog etEmployee (employeeNumber) eu recebo o seguinte erro:

Falha ao chamar o serviço. Possíveis causas: O serviço está offline ou inacessível; a configuração do lado do cliente não corresponde ao procurador; o proxy existente é inválido. Consulte o rastreio da pilha para obter mais detalhes. Você pode tentar recuperar iniciando um novo proxy, restaurar a configuração padrão, ou atualizar o serviço.

Eu era capaz de chamar com êxito este serviço através do envio de um pedido do browser.

Qualquer idéia por que eu não posso usar o teste do WCF cliente?

Foi útil?

Solução

Por favor, ignore a minha resposta anterior. Eu não acho que o problema está na configuração do lado do cliente.

WCF teste cliente e WebHttpBinding .

Esta é uma limitação da web próprio modelo de programação. Ao contrário SABÃO os terminais (isto é, aqueles com BasicHttpBinding, WSHttpBinding, etc) que tem uma forma de expor metadados sobre si (WSDL ou Mex) com informações sobre todas as operações / parâmetros no endpoint, há atualmente nenhuma maneira padrão para expor metadados para um endpoint não-sabão - e isso é exatamente o que a endpoints baseados em WebHttpBinding são. No Resumindo, o teste do cliente WCF não será útil para endpoints baseados na web. E se algum padrão para representar endpoints de estilo web surge quando WCF navios sua próxima versão, que provavelmente atualizar o cliente de teste para apoiá-lo, mas por enquanto não há nenhum amplamente adotada.

Outras dicas

Eu acho que sua configuração está errado, você deve adicionar o modo de segurança nó = "Nenhum" e atributo bindingConfiguration = "NoneSecurity"

Alterar como minha configuração, tente novamente:

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

o caminho no meu caso:

   /opt/infamdm/hub/server/resources/cmxserver.properties
   /opt/infamdm/hub/cleanse/resources/cmxcleanse.properties
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top