2011-01-13 14 views
7

Estoy tratando de detectar excepciones regulares de un servicio WCF en una aplicación cliente de Silverlight. Para eso he incluido los cambios respectivos en mi servicio WCF como se da in this MSDN article.El elemento 'comportamiento' tiene el elemento secundario no válido 'myFaultExtension' en wcf app.config

Pero cuando configuro la extensión de comportamiento y uso el mismo en el comportamiento del punto final, el error mencionado arriba está apareciendo y el servicio no se puede ejecutar debido a este error.

Estoy poniendo aquí mi configuración. Amablemente sugiero cómo puedo resolver esto?

<extensions> 
     <!--Add a behavior extension within the service model--> 
     <!-- Here SilverlightFaultBehavior is a class in AppServiceLib namespace --> 
     <behaviorExtensions> 
     <add name="myFaultExtension" 
      type="AppServiceLib.SilverlightFaultBehavior,AppServiceLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
     </behaviorExtensions> 
    </extensions> 
    <endpointBehaviors> 
     <behavior name="myFaultBehavior"> 
      <**myFaultExtension**/> 
     </behavior> 
    </endpointBehaviors> 
+0

http://connect.microsoft.com/VisualStudio/feedback/details/619106/wcf-fails-to-find-custom-behaviorextensionelement-if-type-attribute-doesnt-match-exactly – nologo

+0

posible duplicado de [Audiencia "elemento 'comportamiento' tiene elemento secundario no válido" se debe ignorar, pero se le impidió actualizar la referencia del servicio debido a ello] (http://stackoverflow.com/questions/9482091/hearing-element-behavior-has-invalid- child-element-should-be-ignored-but-pr) – McGarnagle

Respuesta

0

Usted puede estar recibiendo este error en Visual Studio al crear el archivo de configuración de WCF, ya que el editor de VS no sabe nada de esa extensión.

¿Pero esto sucede en tiempo de ejecución también?

¿Cómo y dónde está utilizando este comportamiento? En el lado del servidor? En el lado del cliente? ¿Ambos?

0

Me encontré con este mismo problema. La solución para mí fue en realidad proporcionada en la publicación duplicada antes mencionada Hearing "element 'behavior' has invalid child element" should be ignored, but prevented from updating service reference because of it. Resultó que el campo 'tipo' es muy sensible. Terminó usando el Console.WriteLine(typeof(BetterErrorMessagesFaultBehavior).AssemblyQualifiedName); mencionado como answer en la otra publicación para obtener el tipo exacto que necesitaba.

<add name="myFaultExtension" 
     type="AppServiceLib.SilverlightFaultBehavior,AppServiceLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
+0

No funcionó para mí. –

+0

@ Akira: compruebe mi respuesta, puede que lo ayude. –

2

Esto causa problemas cuando la versión del conjunto se autoincorpora durante la compilación/compilación del ensamblaje.

Solucionado desde .NET 4.0. La versión/Culture/PublicKeyToken puede caerse para que la configuración ya no necesite el valor autoincrementado de la versión.

<behaviorExtensions> 
    <add name="serviceKeyBehavior" 
    type="MyNamespace.ServiceKeyBehaviorExtensionElement, MyAssembly"/> 
</behaviorExtensions> 
0

Intente definir su WCF en web.config con el editor para evitar errores. (Especialmente cuando requirió escribir el nombre de tipo completo).

haga clic en el botón derecho en el web.config, a continuación, en Editar configuración de WCF:

enter image description here

luego ir a: Avanzadas -> Extensiones -> extensiones de elementos de comportamiento -> Nueva

enter image description here

Luego debajo (General), haga clic en el botón pequeño izquierdo y elija el nuevo comportamiento. Escribirá el nombre de tipo completo en la aplicación.config para usted.

enter image description here

Ahora se puede ver su nuevo comportamiento bajo la etiqueta <extensions> en el app.config con el nombre del tipo correcto.

1

Tuve este error con mi extensión de comportamiento personalizado que quería agregar como comportamiento de punto final. Entonces, edité el esquema utilizado en Visual Studio 2017 para eliminar la advertencia en mi archivo web.config.Es la misma advertencia que recibió:

El elemento 'comportamiento' tiene un elemento secundario no válido 'CustomSecurity'. Lista de posibles elementos esperados: 'clientVia, callbackDebug, callbackTimeouts, clear, clientCredentials, transactedBatching, dataContractSerializer, dispatcherSynchronization, remove, synchronousReceive, webHttp, enableWebScript, endpointDiscovery, soapProcessing'.

Mi web.config tiene: nodo XML

<system.serviceModel> 
    <extensions> 
     <behaviorExtensions> 
      <add name="CustomSecurity" 
       type="FullyQualifiedPath.MyCustomBehaviorExtension, MyAssemblyName"/> 
      </behaviorExtensions> 
    </extensions> 
    <endpointBehaviors> 
     <behavior name="CustomServiceBehavior"> 
      <CustomSecurity /> 
     </behavior> 
    </endpointBehaviors> 
    <endpoint address="https://SomeServer/MyService.svc/soap" 
    behaviorConfiguration="CustomServiceBehavior" binding="basicHttpBinding" 
    bindingConfiguration="BasicHttpBinding_IProject" contract="ProjectService.IProject" 
    name="BasicHttpBinding_IProject" /> 

El CustomSecurity siempre tenía la línea azul ondulada debajo de ella en Visual Studio. Aparece como una advertencia en la ventana Lista de errores. Quería deshacerme de él porque cada vez que intenté actualizar una referencia de servicio, fallaba debido a la advertencia en web.config.

Por lo tanto, para solucionarlo, necesitará editar el esquema que Visual Studio usa para validar los elementos. Entonces, abrí mi web.config, luego seleccioné XML en la barra de menú principal de Visual Studio. Luego seleccione Schemas. Obtendrás una larga lista de esquemas. Busque "DotNetConfig.xsd" como se ve a continuación. enter image description here

Examine la ruta que se muestra y edite el archivo xsd. Buscar: <xs:element name="behavior" vs:help="configuration/system.serviceModel/behaviors/endpointBehaviors/behavior">

A continuación, agregue un nuevo nodo xs: element dentro del nodo xs: choice con el nombre de su extensión de comportamiento personalizado; en mi caso, CustomSecurity. Guarde el archivo y Visual Studio debe validar automáticamente contra el nuevo esquema y no debería recibir una advertencia en su web.config por más tiempo.

<xs:element name="behavior" vs:help="configuration/system.serviceModel/behaviors/endpointBehaviors/behavior"> 
<xs:complexType> 
<xs:annotation> 
    <xs:documentation>The behavior element contains a collection of settings for the behavior of an endpoint.</xs:documentation> 
</xs:annotation> 
<xs:choice minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="CustomSecurity" vs:help="configuration/system.serviceModel/behaviors/endpointBehaviors/behavior/CustomSecurity"> 
     <xs:complexType> 
      <xs:annotation> 
       <xs:documentation>Specifies the behavior extension class applied to the endpoint.</xs:documentation> 
      </xs:annotation> 
      <xs:anyAttribute namespace="http://schemas.microsoft.com/XML-Document-Transform" processContents="strict" /> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="clientVia" vs:help="configuration/system.serviceModel/behaviors/endpointBehaviors/behavior/clientVia"> 
     <xs:complexType> 
      <xs:annotation> 
       <xs:documentation>Specifies the URI for which the transport channel should be created.</xs:documentation> 
      </xs:annotation> 
      <xs:attribute name="viaUri" type="xs:string" use="optional"> 
       <xs:annotation> 
        <xs:documentation>A string that specifies a URI that indicates the route a message should take.</xs:documentation> 
       </xs:annotation> 
      </xs:attribute> 
      <xs:attribute name="lockAttributes" type="xs:string" use="optional" /> 
      <xs:attribute name="lockAllAttributesExcept" type="xs:string" use="optional" /> 
      <xs:attribute name="lockElements" type="xs:string" use="optional" /> 
      <xs:attribute name="lockAllElementsExcept" type="xs:string" use="optional" /> 
      <xs:attribute name="lockItem" type="boolean_Type" use="optional" /> 
      <xs:anyAttribute namespace="http://schemas.microsoft.com/XML-Document-Transform" processContents="strict" /> 
     </xs:complexType> 
    </xs:element> 
Cuestiones relacionadas