2009-01-22 10 views
32

Mi WCF parece estar utilizando el nombre de la computadora en lugar del nombre de dominio. Cuando veo el enlace MyService.svc?wsdl, aparece el nombre de mi computadora.WCF no usa el nombre de la computadora en lugar del nombre de dominio al ver MyService.svc? Wsdl

¿Dónde agrego mi nombre de dominio en la web.config? Dirección de punto final, baseaddress o identidad?

Nota: Estoy usando SSL por lo que tiene que ser https://www.example.com/myservice.svc

+0

ver si esto [mensaje] (http://jstawski.com/archive/2008/05/01/wcf-wsdl-location-address-with-https.aspx) puede ayudar. –

+0

qué hackeo. ¿Es esto un error conocido porque no puedo ver cómo los proveedores de servicios compartidos manejan esto? – Blankman

Respuesta

3

Estamos utilizando WCFExtras para cambiar el nombre del host.

WCFExtras es una pequeña biblioteca de código abierto que le permitirá escribir lo siguiente para cambiar el nombre de host:

<behaviors> 
    <endpointBehaviors> 
    <behavior name="xxx"> 
     <wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" /> 
    </behavior> 
    ... 
9

Para IIS7 no se agrega a web.config, pero a la configuración de IIS archivo.

En primer lugar, edite los enlaces de su sitio web para que el protocolo HTTP especifique un nombre de host si aún no lo ha hecho; esto garantizará que reciba el nombre correcto en HTTP.

vaya a C: \ Windows \ System32 \ inetsrv \ config y abierta applicationHost.config

Busque la sección de sitios. Verá algo como lo siguiente

<sites> 
    <site name="Default Web Site" id="1"> 
    <application path="/"> 
     <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> 
    </application> 
    <bindings> 
     <binding protocol="http" bindingInformation="*:80:puck" /> 
     <binding protocol="net.tcp" bindingInformation="808:*" /> 
     <binding protocol="net.pipe" bindingInformation="*" /> 
     <binding protocol="net.msmq" bindingInformation="localhost" /> 
     <binding protocol="msmq.formatname" bindingInformation="localhost" /> 
     <binding protocol="http" bindingInformation="*:80:puck.idunno.org" /> 
     <binding protocol="http" bindingInformation="*:80:localhost" /> 
     <binding protocol="https" bindingInformation="*:443:" /> 
    </bindings> 
    </site> 
    .... 
</sites> 

Se puede ver que los enlaces para el protocolo http especificar un encabezado de host, pero no lo hace https. Cuando navega por la web no puede usar encabezados de host a través de HTTPS, pero WCF todavía lo usa cuando genera el WSDL; si no puede encontrar uno, volverá al nombre de la máquina.

Así que todo lo que necesita hacer es editar el enlace HTTPS al igual que

 <binding protocol="https" bindingInformation="*:443:puck" /> 

añadiendo el FQDN correcto hasta el final de la información de enlace. Restablecer IIS y WCF debería obtenerlo ahora.

solución El IIS6 ya ha sido publicado por Darin

+0

Oh man si solo encontré esto 2 horas antes –

+0

Esto funciona, pero me sale un problema, solo funcionará el nombre de dominio exacto que especifico. Por ejemplo, si lo hago: *: 443: domain.com Sólo entonces domain.com/Service.svc va a funcionar, si lo hago: *: 443: www.domain.com Sólo entonces www.domain.com/ Service.svc funcionará, pero no ambos. ¿Cómo puedo obtener ambos? (Con el prefijo https) – test

27

WCF 4.0 ha resuelto este problema en algunos casos con una nueva opción de configuración que utilizan Solicitar encabezados:

<behaviors> 
     <serviceBehaviors> 
      <behavior name="AutoVaultUploadBehavior"> 
       <useRequestHeadersForMetadataAddress> 
        <defaultPorts> 
         <add scheme="https" port="443" /> 
        </defaultPorts> 
       </useRequestHeadersForMetadataAddress> 
+1

El mismo problema y esta solución funcionó perfectamente para mí. ¡Gracias! – a432511

+0

y para http? ¿cómo hacerlo? –

1

Aunque es un viejo anuncio, aquí está la respuesta. Bajo el comportamiento del servicio -> ServiceMetaData add url de servicio.

Tenga en cuenta si no se agrega myService, lanzará otro error.

1

Tuve este problema con mi servidor de producción. He encontrado varios artículos sobre los múltiples encabezados de host con IIS y WCF, pero si usa SSL, no puede agregar un encabezado de host a las identidades del sitio web dentro de la IU de IIS, solo puede agregarlos a las identidades HTTP normales:

enter image description here

Sin embargo puede agregar encabezados de host SSL a través de un script de línea de comandos, y esto resuelto el problema para mí:

cscript.exe adsutil.vbs set /w3svc/<site identifier>/SecureBindings ":443:<host header>" 

para obtener más información sobre esta consulta este enlace: http://blumenthalit.net/blog/Lists/Posts/Post.aspx?ID=14

4

Para solucionar este problema Configure el atributo httpGetEnabled y httpsGetEnabled atributo en el archivo web.config

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
+0

Simple, fácil, exactamente lo que se necesita. No sé por qué los demás están sugiriendo todas estas otras soluciones complicadas. Esto hace exactamente lo que el OP quiere. – Steve

+0

¡Eso fue lo más importante para mí! Gracias @Haridharan –

2

sólo añadir <useRequestHeadersForMetadataAddress></useRequestHeadersForMetadataAddress> al solucionado mi problema. Parece que WCF 4.0 se ocupa de los encabezados al agregar Estaba usando SSL para acceder al servicio WCF.

0

Gracias a Kanasz Robert. Pasos que resolvieron mi problema - 1.Produce el WSDL en el navegador y guardar en un archivo (? Golpeando .svc WSDL desde el navegador) Salvo .wsdl

  1. producir el archivos xsd pulsando url desde wsdl (xsd = xsd0, etc.) y guardar en archivo desde el navegador, guardar como .wsdl

  2. reemplazar todas las referencias de nombre de máquina de wsdl con nombre de dominio (o dirección IP) y cambiar referencias xsd y guarde Y reemplace todas las referencias de nombre de máquina de archivos xsd con nombre de dominio (o dirección IP) asegúrese de nombrar el archivo xsd con la extensión .xsd (es decir, nombre0.xsd, nombre1.xsd, nombre2.xsd)

  3. copia WSDL y el archivo (s) xsd al directorio virtual añaden a las líneas de su web.config siguiente:

<behaviors> 
 
     <serviceBehaviors> 
 
     <behavior name="MyServiceBehavior"> 
 
      <serviceMetadata httpGetEnabled="true" externalMetadataLocation="http://IPorDomainName/MyServices/FileTransferService.wsdl" /> 
 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
 
     </behavior> 
 
     </serviceBehaviors> 
 
    </behaviors>

Cuestiones relacionadas