2009-02-19 33 views

Trả lời

2

Không có tối đa. Bạn có thể có bao nhiêu tùy thích, AFAIK.

Tuy nhiên, có hay không thực tế là một vấn đề khác. Nó sẽ trở nên khá khó sử dụng nếu bạn có quá nhiều phương pháp trên một hợp đồng.

7

Mặc dù không có tối đa, bạn có thể gặp sự cố với Metadata Exchange - và giá trị cấu hình sau và giá trị mặc định: maxNameTableCharCount.

Trong khi cố gắng thêm một chức năng mới cho một hoạt động hiện WCF Service, tôi gặp phải lỗi khi cố gắng để "Update Service Reference" - liên quan đến giá trị mặc định của maxNameTableCharCount quá nhỏ để xử lý các kích thước của việc chuyển giao mex.

Có thể ghi đè các giá trị mặc định cho Metadata Exchange bằng cách thêm một tùy chỉnh mex binding trong cấu hình máy chủ.

Bạn có thể thấy một thông báo lỗi như dưới đây khi bạn cố gắng thêm hoặc cập nhật tài liệu tham khảo dịch vụ của bạn nếu giá trị cấu hình được vượt quá:

Hạn ngạch số ký tự nametable tối đa (16384) đã bị vượt quá trong khi đọc Dữ liệu XML. Bảng tên là cấu trúc dữ liệu được sử dụng để chuỗi lưu trữ gặp phải trong quá trình xử lý XML - các tài liệu XML dài với các tên phần tử không lặp lại, tên thuộc tính và giá trị thuộc tính có thể kích hoạt hạn ngạch này. Hạn ngạch này có thể tăng lên bằng cách thay đổi thuộc tính MaxNameTableCharCount trên đối tượng XmlDictionaryReaderQuotas được sử dụng khi tạo trình đọc XML. Line 1, vị trí 332845.

điểm cuối máy chủ Mex nên được quy định như sau:

<endpoint address="mex" 
      binding="customBinding" 
      contract="IMetadataExchange" 
      name="" 
      bindingConfiguration="customMex" 
      listenUriMode="Explicit" /> 

Với một khối Tuỳ chỉnh Binding quy định như sau:

<customBinding> 
    <binding name="customMex"> 
     <textMessageEncoding> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
     </textMessageEncoding> 
     <httpTransport transferMode="Buffered" maxReceivedMessageSize="2147483647" 
         maxBufferSize="2147483647"/> 
    </binding> 
</customBinding> 

Nó có thể giúp đỡ nếu bạn' đang chạy lại vào các vấn đề với nhiều phương thức trên một dịch vụ.

+1

'mex' được sử dụng bởi các công cụ WCF để tạo ra một lớp proxy cho khách hàng, nhưng không bao giờ thực sự được sử dụng bởi chính máy khách. Vậy tại sao tệp cấu hình ứng dụng khách cần gắn kết này? – mcoolbeth

+0

Bạn hoàn toàn đúng, cấu hình máy khách không yêu cầu bất kỳ cấu hình tương ứng nào. Tôi đã sửa đổi bài đăng ngay bây giờ, cảm ơn. – Tanner

+0

Tôi chưa đạt được thành công nào theo phương pháp này. Tôi đang sử dụng ràng buộc netTcp cho dịch vụ của mình. Tôi đã tắt http và vì vậy tôi đã chỉ định tcpTransport thay vì httpTransport. Nhưng điều này vẫn không thành công khi tôi có một số lượng lớn các OperationContracts. Bất cứ ai có thể cung cấp bất kỳ đầu vào? –

0

Giới hạn thực tế có thể không quá 10-12 phương pháp. Hơn thế nữa và bạn có lẽ không còn mô tả hoạt động của một thành phần đơn lẻ nữa. Tôi sẽ cố gắng thực sự khó khăn để cấu trúc lại bất kỳ thành phần nào với hàng tá hoạt động thành nhiều thành phần.

Điều đó nói rằng, tôi chắc chắn có ngoại lệ!

Các vấn đề liên quan