2013-02-19 28 views
11

Tình hình mà tôi đang làm việc với là tối ưu, vì vậy chịu với tôi ..Tái sử dụng các lớp học có sẵn từ một dịch vụ tham khảo

Chúng ta phải tiêu thụ bên ngoài (không NET) SOAP-webservices.
Đối với một số lý do, mỗi phương pháp được thực hiện trong một dịch vụ web riêng với nó WSDL riêng.
Rất nhiều đối tượng được trả về bởi các dịch vụ web có chính xác thiết kế, tên và không gian tên xml.

"Thêm dịch vụ tham khảo" được sử dụng bởi vì:
- đội dev nội bộ được sử dụng để nó
- chúng tôi muốn giữ tự động "Update Service Reference"

Các tài liệu tham khảo 2 được thêm vào với tùy chọn "Tái sử dụng các loại trong tất cả các hội đồng được tham chiếu".
Tất cả các lớp học tuy nhiên được tạo lại trong tham chiếu mới.

là nơi một cách để tái sử dụng các lớp từ các 1st tham khảo?

+0

Bạn có nghĩa là các lớp sử dụng lại như lớp dữ liệu? Có lẽ không, vì mỗi proxy của khách hàng nằm trong vùng tên riêng của nó. Nếu bạn đang chia sẻ các đối tượng dữ liệu phổ biến, những gì bạn thực sự cần làm là mã hóa tay lớp proxy của máy khách hoặc tạo trình tạo proxy máy khách của riêng bạn. NET thực sự làm cho nó khá dễ dàng để làm điều đó loại điều. Bạn thậm chí có thể tận dụng thứ gì đó như T4 để giúp tạo mã. – Pete

+0

Tôi có nghĩa là các lớp dữ liệu và các vấn đề trong tay là idd các không gian tên cho mỗi proxy. Làm thế nào tôi sẽ đi về một máy phát điện proxy của khách hàng? – David

+0

bản sao có thể có của [svcutil exlude/tái sử dụng các assembly được kết nối lại] (http://stackoverflow.com/questions/8786096/svcutil-exlude-reuse-refrenced-assemblies). Bạn đã thử 'svcutil.exe/r' chưa? – jrummell

Trả lời

18

Bạn có thể thêm nhiều WSDL nếu mở Tài liệu tham khảo dịch vụ Reference.svcmap (để tìm, kiểm tra "Hiển thị tất cả tệp" và mở rộng tham chiếu dịch vụ) và chỉnh sửa thủ công, thay vì đặt URI WSDL thông qua GUI. Ví dụ.

<MetadataSources> 
    <MetadataSource Address="http://localhost/example1.wsdl" Protocol="http" SourceId="1" /> 
    <MetadataSource Address="http://localhost/example2.wsdl" Protocol="http" SourceId="2" /> 
    </MetadataSources> 

Khi bạn có nhiều WSDL trong một Tham chiếu dịch vụ, các lớp sẽ được sử dụng lại khi bạn mô tả, miễn là chúng giống hệt nhau trong các WSDL khác nhau. Nếu có các lớp có cùng tên nhưng định nghĩa khác nhau, một trong số chúng sẽ có hậu tố '1' được thêm vào tên của nó.

+0

Cảm ơn, chính xác những gì tôi cần! Các lớp có cùng tên nhưng định nghĩa khác nhau được xử lý như sau: ClassName, ClassName1. Bạn có muốn biết cách kiểm soát hậu tố ('ví dụ' thay cho '1') không? – David

+0

Bạn có thể thử viết trình tạo proxy máy khách của riêng mình. Khi bạn tìm thấy một lớp kết thúc bằng '1', hãy thay đổi nó thành hậu tố bạn thích. Xem http://www.primordialcode.com/blog/post/silverlight-wcf-writing-custom-wcf-proxy-generator-support-validation để bắt đầu. –

+0

Tôi chỉ có 1 WSDl trong 1 tham chiếu dịch vụ trong svcmap nhưng nó vẫn tạo ra một số thuộc tính với 1 hậu tố. Điều gì có thể là lý do? bất kỳ ý tưởng? – batmaci

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