我正在尝试从Silverlight客户端应用程序中捕获来自WCF服务的常规异常。为此,我已将WCF服务中的相应更改包含在in this MSDN article中。
但是,当我配置行为扩展并在端点行为中使用相同的内容时,上面提到的错误即将出现,并且由于此错误,服务无法运行。
我在这里配置我的配置。请建议我如何解决这个问题?
<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 :(得分:2)
在程序集编译/构建期间自动增加程序集的版本时,这会导致问题。
自.NET 4.0起修复。版本/ Culture / PublicKeyToken 可能被删除,以便配置不再需要版本的自动增量值。
<behaviorExtensions>
<add name="serviceKeyBehavior"
type="MyNamespace.ServiceKeyBehaviorExtensionElement, MyAssembly"/>
</behaviorExtensions>
答案 1 :(得分:1)
尝试使用编辑器在web.config中定义WCF以防止出错。 (特别是当您需要编写整个类型名称时)。
右键单击web.config,然后单击Edit WCF Configuration:
然后转到:高级 - &gt;扩展程序 - &gt;行为元素扩展 - &gt;新
然后在(常规)下单击左侧小按钮并选择新行为。它将在app.config中为您编写完整的类型名称。
现在,您可以使用正确的类型名称在app.config中的<extensions>
标记下查看新行为。
答案 2 :(得分:1)
我的自定义行为扩展程序出现此错误,我想将其添加为端点行为。因此,我编辑了Visual Studio 2017中使用的模式,以消除我的web.config文件中的警告。这是你收到的警告:
元素'behavior'具有无效的子元素'CustomSecurity'。预期可能元素的列表:'clientVia,callbackDebug,callbackTimeouts,clear,clientCredentials,transactedBatching,dataContractSerializer,dispatcherSynchronization,remove,synchronousReceive,webHttp,enableWebScript,endpointDiscovery,soapProcessing'。
我的web.config有:
<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" />
CustomSecurity XML节点在Visual Studio中始终具有蓝色波浪线。它在错误列表窗口中显示为警告。我想摆脱它,因为每次我尝试更新服务引用时,由于web.config中的警告,它都会失败。
因此,要修复它,您需要编辑Visual Studio用于验证元素的模式。所以,我打开了我的web.config,然后在主Visual Studio菜单栏上选择了XML。然后选择Schemas。你会得到一长串的模式。找到“DotNetConfig.xsd”(或DotNetConfig [XX] .xsd,其中XX是.NET Framework版本),如下所示。
更新:您可能希望使用DotNetConfig文件前缀编辑任何/所有xsd文件。通常,您不希望一次使用所有DotNetConfigXX.xsd文件。最好只打开一个“使用此架构”选项(在“使用”列中);否则,您可能会看到有关已定义的架构元素的错误。
浏览到“位置”列中显示的路径,然后编辑xsd文件。搜索:<xs:element name="behavior" vs:help="configuration/system.serviceModel/behaviors/endpointBehaviors/behavior">
然后在xs:choice节点中添加一个新的xs:element节点,其中包含自定义行为扩展的名称;就我而言,CustomSecurity。保存文件,Visual Studio应自动验证新架构,您不应再在web.config中收到警告。
<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>
答案 3 :(得分:0)
我遇到了同样的问题。我的解决方案实际上是在前面提到的重复发布Hearing "element 'behavior' has invalid child element" should be ignored, but prevented from updating service reference because of it中提供的。原来'类型'字段非常敏感。在其他帖子中使用Console.WriteLine(typeof(BetterErrorMessagesFaultBehavior).AssemblyQualifiedName);
作为answer提及,以获得我需要的确切类型。
<add name="myFaultExtension"
type="AppServiceLib.SilverlightFaultBehavior,AppServiceLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
答案 4 :(得分:0)
iCode的解决方案对我有用但我必须编辑在...... Xml / Schemas /中找到的所有版本的DotNetCofig4x.xsd文件。 x在4x.xsd中表示40.xsd,45.xsd,47.xsd和471.xsd