2011-01-13 28 views
7

Tôi đang cố gắng nắm bắt ngoại lệ thường xuyên từ dịch vụ WCF trong ứng dụng khách Silverlight. Cho rằng tôi đã bao gồm những thay đổi tương ứng trong dịch vụ WCF của tôi như được đưa ra in this MSDN article.Yếu tố 'hành vi' có phần tử con không hợp lệ 'myFaultExtension' trong wcf app.config

Nhưng khi tôi định cấu hình tiện ích mở rộng hành vi và sử dụng cùng một hành vi điểm cuối, lỗi được đề cập ở trên sẽ xuất hiện và dịch vụ không thể chạy do lỗi này.

Tôi đang đặt cấu hình của mình ở đây. Vui lòng đề nghị làm thế nào tôi có thể giải quyết điều này?

<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

thể trùng lặp của [Hearing "element 'behavior' có phần tử con không hợp lệ" nên bỏ qua, nhưng không được cập nhật tham chiếu dịch vụ vì nó] (http://stackoverflow.com/questions/9482091/hearing-element-behavior-has-invalid- child-element-should-be-ignore-but-pr) – McGarnagle

Trả lời

0

Bạn có thể nhận được lỗi này trong Visual Studio khi tạo tập tin cấu hình WCF, kể từ khi biên tập VS không biết về phần mở rộng đó.

Nhưng điều này có xảy ra trong thời gian chạy không?

Bạn đang sử dụng hành vi này ở đâu và ở đâu? Về phía máy chủ? Về phía khách hàng? BotH?

0

Tôi đã gặp phải sự cố tương tự này. Giải pháp cho tôi đã thực sự được cung cấp trong bài đăng trùng lặp đã nói ở trên Hearing "element 'behavior' has invalid child element" should be ignored, but prevented from updating service reference because of it. Hóa ra trường 'loại' rất nhạy cảm. Đã kết thúc bằng cách sử dụng Console.WriteLine(typeof(BetterErrorMessagesFaultBehavior).AssemblyQualifiedName); được đề cập dưới dạng answer trên bài đăng khác để có được loại chính xác mà tôi cần.

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

Không làm việc cho tôi. –

+0

@Akira: Kiểm tra câu trả lời của tôi, nó có thể giúp bạn. –

2

Điều này gây ra sự cố khi phiên bản lắp ráp được tự động tăng trong quá trình biên dịch/xây dựng lắp ráp.

Đã sửa lỗi từ .NET 4.0. Phiên bản/Văn hóa/PublicKeyToken có thể bị ngắt sao cho cấu hình không còn cần giá trị được tự động tăng của phiên bản nữa.

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

Cố gắng xác định WCF của bạn trong web.config bằng trình chỉnh sửa để ngăn lỗi. (Đặc biệt khi bạn yêu cầu viết toàn bộ tên loại).

Nhấp chuột phải vào web.config, sau đó Sửa WCF Cấu hình:

enter image description here

Sau đó hãy vào: Advanced -> Extensions -> mở rộng yếu tố hành vi -> New

enter image description here

Sau đó dưới (Chung) nhấp vào nút nhỏ bên trái và chọn hành vi mới. Nó sẽ viết tên kiểu đầy đủ trong app.config cho bạn.

enter image description here

Bây giờ bạn có thể thấy hành vi mới của bạn dưới thẻ <extensions> trong app.config với tên đúng loại.

1

Tôi gặp lỗi này với tiện ích hành vi tùy chỉnh của mình mà tôi muốn thêm làm hành vi điểm cuối. Vì vậy, tôi đã chỉnh sửa lược đồ được sử dụng trong Visual Studio 2017 để loại bỏ cảnh báo trong tệp web.config của tôi.Đó là cảnh báo tương tự mà bạn đã nhận được:

Hành vi của phần tử có phần tử con không hợp lệ 'CustomSecurity'. Danh sách các phần tử có thể mong đợi: 'clientVia, callbackDebug, callbackTimeouts, clear, clientCredentials, transactedBatching, dataContractSerializer, dispatcherSynchronization, remove, synchronousReceive, webHttp, enableWebScript, endpointDiscovery, soapProcessing'.

web.config của tôi có: nút 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" /> 

Các CustomSecurity luôn có dòng màu xanh nguệch ngoạc bên dưới nó trong Visual Studio. Nó xuất hiện dưới dạng một Cảnh báo trong cửa sổ Danh sách lỗi. Tôi muốn loại bỏ nó bởi vì mỗi lần tôi cố gắng cập nhật một tham chiếu dịch vụ, nó sẽ thất bại vì cảnh báo trong web.config.

Vì vậy, để sửa lỗi, bạn cần phải chỉnh sửa lược đồ mà Visual Studio sử dụng để xác thực các thành phần. Vì vậy, tôi đã mở web.config của mình, sau đó chọn XML trên thanh trình đơn Visual Studio chính. Sau đó chọn Schemas. Bạn sẽ nhận được một danh sách dài các lược đồ. Tìm "DotNetConfig.xsd" như bên dưới. enter image description here

Duyệt tới đường dẫn được hiển thị và chỉnh sửa tệp xsd. Tìm kiếm: <xs:element name="behavior" vs:help="configuration/system.serviceModel/behaviors/endpointBehaviors/behavior">

Sau đó, thêm nút xs: element mới trong nút xs: choice với tên của tiện ích mở rộng hành vi tùy chỉnh của bạn; trong trường hợp của tôi, CustomSecurity. Lưu tập tin và Visual Studio nên xác nhận hợp lệ đối với lược đồ mới tự động và bạn sẽ không nhận được một cảnh báo trong web.config của bạn nữa.

<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> 
Các vấn đề liên quan