2011-10-15 32 views
5

Một vài câu hỏi rất cơ bản. Tôi mới tham gia WCF và tôi đang xây dựng một ứng dụng có Dự án dịch vụ, Dự án ứng dụng web và một vài dự án thư viện lớp mà tôi sử dụng cho logic nghiệp vụ, v.v.Thêm dịch vụ WCF Tham khảo nhiều dự án

Tôi đang lưu trữ WCF cục bộ trên IIS của mình và cố gắng thêm các tham chiếu dịch vụ vào các dự án.

Câu hỏi 1. Khi thêm tài liệu tham khảo, tôi có nên thêm tham chiếu dịch vụ vào từng dự án riêng biệt hay không? Có cách nào tôi có thể chia sẻ cùng một tham chiếu Dịch vụ trên các dự án không? Lý do tôi hỏi là vì nếu tôi thêm các tham chiếu riêng biệt, mỗi tham chiếu sẽ có không gian tên riêng và khi tôi phải truyền cùng một đối tượng giữa các dự án, tôi nhận được một InvalidCastException vì mỗi ServiceClient có một không gian tên khác nhau.

Ví dụ -.. Site.Business.XDataService.XDataServiceClient() GetItem() là không giống như Site.Web.XDataService.XDataServiceClient() GetItem()

Câu hỏi 2. tôi đã chỉ định địa chỉ của dịch vụ địa phương trong lớp mà thực hiện các giao diện dịch vụ như sau -

[ServiceBehavior (Namespace = "http: // localhost: 801/XDataService.svc", IncludeExceptionDetailInFaul ts = true)]

Điều này có vẻ không đúng. Nếu tôi chuyển mã của mình sang môi trường sống/khác, tôi rõ ràng sẽ phải thay đổi phần này một lần nữa và biên dịch lại. Tôi có thể chỉ định điều này (Web.Config?) Để tôi có thể thay đổi địa chỉ này mà không phải xây dựng lại ứng dụng của mình ở đâu?

Đánh giá cao mọi loại thông tin chi tiết. Cảm ơn!

Trả lời

6

Trong câu trả lời cho câu hỏi đầu tiên, bạn có thể đặt tham chiếu dịch vụ trong dự án của chính nó và tham khảo dự án đó trong tất cả các dự án khác cần truy cập dịch vụ đó.

Về cơ bản tất cả các tài liệu tham khảo dịch vụ là là một khối u mã NET - (!) Namespace, lớp, vv

chưa

tốt hơn cho một dịch vụ WCF bạn cũng nhận được một giao diện ném vào miễn phí (nhiều hơn hoặc ít hơn cùng một giao diện mà bạn đã định nghĩa cho dịch vụ của mình) để bạn có thể làm những điều tốt đẹp về kiểm tra việc tiêm phụ thuộc, v.v.

+0

Cảm ơn bạn đã giải thích. Nhưng nếu dự án WCF cũng nằm trong cùng một ứng dụng, bạn sẽ khuyên tôi tạo hai dự án, một máy chủ là nơi lưu trữ tất cả các mã và một dịch vụ khác mà tôi đang sử dụng làm tài liệu tham khảo cho các dự án khác ? – Kalyan

+1

Có, hai dự án và có một Khách hàng dịch vụ mà bạn tham khảo trong các dự án khác của bạn – Murph

4

Câu hỏi đầu tiên - dịch vụ cũng giống như bất kỳ mã nào khác. Ví dụ, mã truy cập cơ sở dữ liệu. Bạn có nên đặt điều đó trong mọi dự án cần truy cập vào cơ sở dữ liệu của bạn không? Không - bạn nên đặt nó vào một dự án mà những dự án khác có thể tham khảo.

Đối với câu hỏi thứ hai, bạn chỉ định không gian tên nhưng tôi mong bạn nghĩ rằng bạn đang chỉ định địa chỉ điểm cuối dịch vụ. Không gian tên giống như một không gian tên mã C# - về cơ bản nó cung cấp nhận dạng và rõ ràng hơn nữa trong trường hợp bạn có nhiều đối tượng có cùng tên. Thông thường bạn sẽ sử dụng một không gian tên như http://mywebsite.com/MyService/VersionNumberIfRequired hoặc tương tự.

Địa chỉ được chỉ định trong cấu hình.Địa chỉ sẽ thay đổi tùy thuộc vào môi trường/vị trí triển khai - không gian tên không nên.

+0

Cảm ơn! Tôi biết tôi đã thiếu một cái gì đó liên quan đến Câu hỏi 2. Tôi sẽ làm theo đề nghị của bạn. – Kalyan

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