Pregunta

Tengo un pequeño WCF webservice de trabajo con la incorporada en el Host de Servicio de WCF y con el hosting por el Visual Studio 2008 construido-en el desarrollo web.

Yo estos entornos de hosting me he basado en el Cliente de Prueba de WCF para invocar a los métodos del servicio.

Ahora estoy corriendo en problemas con mi siguiente fase de pruebas:

Yo lo tengo alojado en IIS 5.1 en mi WinXP dev máquina y creo que tal vez el problema es que no puedo continuar el uso de WCF Test Client más.Aquí es lo que está sucediendo:

Caso 1:"Acceso anónimo" está ACTIVADA (ENABLED)

WCF Test Client viene bien, la exposición de la WebMethods y el botón INVOKE.Sin embargo, cuando yo haga clic en INVOCAR que no se puede conectar con un servidor de almacenamiento de datos (una 3 ª parte del producto) que requiere la autenticación de Windows.Yo podría publicar el error regrese de la product.DLL pero creo que no es relevante.

Caso 2:"Acceso anónimo" no está MARCADA (DESHABILITADO)

WCF Test Client no incluso inicializar correctamente.Mi investigación de este me dice que MEX (WS-Intercambio de Metadatos) requiere "Acceso Anónimo" y (al parecer) de WCF Test Client requiere MEX.Aquí tienes los principales fragmentos de el error que se devuelven:

Error: Cannot obtain Metadata from http://localhost/wcfiishost
The remote server returned an error: (401) Unauthorized.HTTP GET Error
URI: http://localhost/wcfiishost    
There was an error downloading 'http://localhost/wcfiishost'.    
The request failed with the error message:
Security settings for this service require 'Anonymous' Authentication but it is not enabled for the IIS application that hosts this service

Las porciones de las explicaciones de las opciones de enlace, la seguridad de los mensajes, etc.y esas cosas yo, sinceramente, no lo entiendo.Aquí está mi opinión sobre donde estoy pero me gustaría sus opiniones:

(a) Porque sé que mi WCF webservice DEBE estar configurado para utilizar la Autenticación de Windows, llego a la conclusión de que no puedo continuar para utilizar el Cliente de Prueba de WCF cuando el hosting de mi servicio en IIS.Que efectivamente ha llegado al final de su utilidad para mí.Tendré que tomar el tiempo para escribir un cliente web porque WCFTestClient no funciona sin Anónimo.

(o)

(b) es posible utilizar WCF Test Client si y el servicio hospedado están configurados propertly (yo no sé lo que la especial configuración de técnicas para esto).

Cual es la correcta?Tiempo para dejar de usar WCFTestClient o hay una manera para tener los dos?Gracias de antemano por tu consejo.

EDITAR:11 de junio 09

¿Hay algo más que puedo ofrecer para ayudar a alguien que me ayude en esta pregunta?

¿Fue útil?

Solución 3

Cuando me juego el título / tema de esta pregunta y llegué a un callejón sin salida aquí, abrí el mismo tema en el foro de MSDN con un énfasis diferente en el título (contenido de la pregunta esencialmente la misma).

Para mí, el verdadero problema era cómo utilizar WcfTestClient en IIS sin autenticación anónima está establecido (porque mi servicio requiere la autenticación integrada de Windows solamente).

Mex aparentemente requiere Anónimo y por defecto WcfTestClient parece necesitar Mex. La clave parece ser servicial tanto mi rascador de seguridad del archivo web.config con cuidado.

De todos modos, tengo que trabajar con este web.config abajo ( el enlace de MSDN es aquí :

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

                 

            <endpoint address="" 
                        binding="wsHttpBinding"
                        bindingConfiguration="wsBindingConfig"
                        contract="sdkTrimFileServiceWCF.IFileService">

                                 <identity>
                                    <dns value="localhost" />
                                 </identity>
            </endpoint>

            <endpoint address="basic" 
                        binding="basicHttpBinding"
                        bindingConfiguration="bindingConfig" 
                        contract="sdkTrimFileServiceWCF.IFileService" />
        </service>
    </services>

    <bindings>
        <basicHttpBinding>
            <binding name="bindingConfig">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows"/>
                </security>
            </binding>
        </basicHttpBinding>

        <wsHttpBinding>
            <binding name="wsBindingConfig">
                <security mode="Transport">
                    <transport clientCredentialType="Windows"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>

                                                                                        

        </serviceBehaviors>
    </behaviors>

      

Otros consejos

Yo sólo trató de tener la misma configuración - pero en mi caso, todo parece funcionar bien

.
  • sitio web ASP.NET
  • Servicio de WCF, utilizando basicHttpBinding sin ninguna configuración especial en absoluto
  • Aplicación IIS con autenticación anónima = habilitado y Windows = habilitado (ambos encendidos)

Puedo conectar fácilmente a ella con el WcfTestClient y recuperar los metadatos, y entonces se puede llamar así, no hay problema.

Dentro de mi función de servicio, puedo comprobar para ver si el usuario actual es un usuario conocido o no, se ha identificado correctamente como un usuario autenticado de Windows:

    ServiceSecurityContext ssc = ServiceSecurityContext.Current;

    if (ssc.IsAnonymous)
    {
        return "anonymous user";
    }
    else
    {
        if(ssc.WindowsIdentity != null)
        {
            return ssc.WindowsIdentity.Name;
        }

        if (ssc.PrimaryIdentity != null)
        {
            return ssc.PrimaryIdentity.Name;
        }
    }

    return "(no known user)";

No se sabe muy bien, ¿qué más para comprobar si hay (excepto Estoy en Vista con IIS7). Cualquier posibilidad de que podría incluir este código para comprobar si el usuario en su código de servicio? Sólo para ver ....

Marc

Marc, su instalación no es ni siquiera cerca de la universidad Johns.

Juan usa WSHttpBinding que utiliza las Credenciales de Windows para el Mensaje de modo de transporte.La Autenticación de Windows no está siendo utilizado con BasicHttpBinding.Además, John había AnonymousAuthentication movilidad, por lo que el Intercambio de Metadatos (mex) está fallando.

La llamada no alcanzar el interior del lado del servicio, función, porque tenemos un Error 401 (no autorizado) cuando tratamos de llamar.

Acaba de conocer a Juan, tengo el mismo problema, y estoy tratando de alguna manera de configurar la separación de los enlaces por extremo.Esperemos que se de trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top