2011-07-08 16 views
6

Tengo el servicio wcf. Traté de generar código proxy y el archivo de configuración para el programa cliente por svcutil:svcutil no genera el archivo de configuración

svcutil http://localhost/WcfService2/Files.svc 

llegué archivo válido con el proxy, pero no llegué archivo de configuración. ¿Por qué? (VS2010 SP1, .NET 4.0, IIS 7.0)

Mi contrato de servicios:

[ServiceContract] 
public interface IFiles 
{ 
    [OperationContract] 
    Guid UploadFile(Stream stream); 
} 

Mi web.config:

<?xml version="1.0"?> 
<configuration> 

    <system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding name="WebHttpBinding" maxBufferSize="65536" maxBufferPoolSize="524288" 
      maxReceivedMessageSize="1073741824" transferMode="Streamed" /> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="MyServiceBehavior" name="WcfService2.Files"> 
     <endpoint behaviorConfiguration="WebHttpBehavior" binding="webHttpBinding" 
      bindingConfiguration="WebHttpBinding" name="Files" contract="WcfService2.IFiles" /> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="WebHttpBehavior"> 
      <webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json" 
      automaticFormatSelectionEnabled="false" /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
    <system.web> 
    <httpRuntime maxRequestLength="100000" /> 
    </system.web> 

</configuration> 

Respuesta

8

puntos finales que utilizan el WebHttpBinding (aka, WCF puntos finales WebHttp) , no exponga los metadatos como lo hacen los puntos finales "normales" (es decir, SOAP). WCF aún generará un WSDL para su servicio (ya que ha especificado <serviceMetadata httpGetEnabled="true"/>), pero los metadatos solo contendrán ciertos aspectos del servicio (como contratos de datos, etc.). Las características relacionadas con la web (atributos WebInvoke/WebGet) no estarán en el proxy, por lo que aunque obtenga un archivo proxy, probablemente no podrá usarlo para comunicarse con el servicio (a menos que no lo haya hecho). usar cualquiera de esos). El problema es que no existe un formato ampliamente aceptado para describir metadatos para servicios REST (WADL es posiblemente el más utilizado, pero no es tan frecuente como WSDL para SOAP, y WCF no lo implementa).

En resumen: svcutil realmente no funciona para puntos finales web.

Si quieres la versión larga: http://blogs.msdn.com/b/carlosfigueira/archive/2012/03/26/mixing-add-service-reference-and-wcf-web-http-a-k-a-rest-endpoint-does-not-work.aspx

+0

No es cierto. Traté de hacer un proyecto simple en casa (bajo VS2008, .NET 3.5). El punto final del servicio se configuró con el elemento de comportamiento webHttpBinding y webHttp. Comando svcutil.exe http: // localhost: 3065/Service1.svc? Wsdl obtuvo tanto el proxy como el archivo de configuración. – vpp

+0

Compruebe el enlace que se utiliza en el archivo de configuración; no será webHttpBinding. Probablemente estés llegando a un punto final predeterminado en el servicio. – carlosfigueira

+0

El servicio tiene solo un punto final. svcutil hace una base para el cliente que tiene acceso al punto final a través de SOAP (messageVersion = "Soap12" de textMessageEncoding of customBinding). Y se describe en el archivo de configuración. La primera muestra no la tenía en absoluto. – vpp

Cuestiones relacionadas