Tôi đang tìm cách tạo lớp proxy được tạo cho Tham chiếu Web (không phải WCF) thực hiện giao diện chung để dễ dàng chuyển đổi giữa quyền truy cập dịch vụ web và quyền truy cập "trực tiếp" lớp kinh doanh trong các ứng dụng của khách hàng, một cái gì đó như:Lớp proxy của Dịch vụ Web để thực hiện giao diện
public IBusiness GetBusinessObject()
{
if (_mode = "remote")
return new BusinessWebService.Business(); // access through web service proxy class
else
return new Business(); // direct access
}
Tuy nhiên, các loại tùy chỉnh (ví dụ như CustomSerializableType
trong các ví dụ dưới đây) không được tham chiếu trong lớp proxy tạo ra. Thay vào đó, các kiểu giống hệt nhau mới được tạo ra, khiến cho lớp proxy không thể thực hiện giao diện.
Có cách nào để làm cho lớp proxy được tạo tham chiếu các loại này hay không, tôi có bị sai về điều này không? Tôi có nên cân nhắc chuyển đổi dịch vụ web sang dịch vụ WCF thay thế không?
Chi tiết
giải pháp của chúng tôi bao gồm bốn dự án:
- Một thư viện kinh doanh (chứa logic kinh doanh, các truy cập lưu trữ dữ liệu)
- Một thư viện chung (chứa chung chức năng, bao gồm
CustomSerializableType
) - Dịch vụ web phó chủ (hoạt động như một proxy giữa khách hàng từ xa và lớp kinh doanh)
- Một cửa sổ ứng dụng
khách hàng của chúng tôi muốn các cửa sổ ứng dụng để có thể chạy trong hai chế độ khác nhau:
- chế độ địa phương , nơi ứng dụng chỉ sử dụng trực tiếp thư viện doanh nghiệp để truy cập dữ liệu
- Chế độ từ xa, nơi ứng dụng liên lạc với dịch vụ web để truy cập dữ liệu
Để thực hiện điều này, chúng tôi đã tạo ra một giao diện, IBusiness, nằm trong thư viện chung và chứa tất cả các phương thức kinh doanh.
Interface
public interface IBusiness
{
CustomSerializableType DoSomeWork();
}
lớp Business
public class Business : IBusiness
{
public CustomSerializableType DoSomeWork()
{
// access data store
}
}
dịch vụ Web
public class WebServiceBusiness : IBusiness
{
private Business _business = new Business();
[WebMethod]
public CustomSerializableType DoSomeWork()
{
return _business.DoSomeWork();
}
}
tạo lớp proxy (một tấn mã trái ra cho dễ đọc)
public partial class Business
: System.Web.Services.Protocols.SoapHttpClientProtocol
{
public CustomSerializableType DoSomeWork()
{
// ...
}
public partial class CustomSerializableType {
// PROBLEM: this new type is referenced, instead of the
// type in the common library
}
}
Bạn đang sử dụng svcutil.exe để tạo các lớp proxy? –
Không, tại thời điểm này tôi chỉ sử dụng công cụ tích hợp sẵn trong Visual Studio 2010. Tôi đã cố gắng rối tung xung quanh một chút với wsdl.exe, nhưng nó đã không giải quyết vấn đề của tôi. Svcutil.exe có phải là lựa chọn thay thế tốt hơn không? Điều đó có đòi hỏi tôi phải nâng cấp lên các dịch vụ WCF, thay vì các dịch vụ Web 'cũ' không? – bernhof