2011-11-03 23 views
6

Tôi đang nhầm lẫn về việc đăng ký cơ sở wcf lâu đài.Tôi có cần tệp svc để thiết lập Castle Wcf Facility cho các dịch vụ không phải là HTTP

Tôi đọc một số bài đăng trên blog cho BasicHttpBinding. Nhưng không thể tìm thấy một mẫu rõ ràng dễ dàng để thiết lập một thiết lập net.tcp.

Tôi muốn để lưu trữ các dịch vụ từ một ứng dụng giao diện điều khiển ...

tôi đã viết một cái gì đó như thế này ... bạn có thể thấy một vấn đề ở đây?

_container = new WindsorContainer(); 
_container.AddFacility<WcfFacility>(); 

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>() 
    .AsWcfService(
     new DefaultServiceModel() 
      .AddEndpoints(WcfEndpoint 
        .BoundTo(new NetTcpBinding() { PortSharingEnabled = false }) 
        .At("net.tcp://localhost/MembershipService") 
      ) 
      .PublishMetadata() 
    ) 
); 

Trả lời

4

Nếu bạn muốn xuất bản siêu dữ liệu bạn sẽ cần phải cho phép chia sẻ cổng (để cho MEX endpoint phần cảng giống như cổng TCP bình thường - bạn sẽ nhận được một ngoại lệ AddressAlreadyInUse nếu bạn có bộ này là false) và có lẽ bạn cần phải xác định một cổng trên URL của bạn (không chắc chắn những gì cổng TCP sẽ sử dụng khác), do đó, mã của bạn nên được (giả sử cổng 8080 là OK cho bạn):

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>() 
    .AsWcfService(
     new DefaultServiceModel() 
      .AddEndpoints(WcfEndpoint 
        .BoundTo(new NetTcpBinding() { PortSharingEnabled = true}) 
        .At("net.tcp://localhost:8080/MembershipService") 
      ) 
      .PublishMetadata() 
    ) 
); 

này hoạt động tốt sử dụng lâu đài windsor 3.0.

+0

Hãy ghi nhớ tính khả hữu khi người dùng không được phép sử dụng chia sẻ cổng. Tôi đã có vấn đề này, tôi đã nhận một CommunicationException với gợi ý tôi có thể chỉnh sửa phần allowAccounts trong tập tin SMSvcHost.exe.config để cho phép người dùng làm điều đó. Nhưng giải pháp này là không thực tế gây ra các tập tin nằm trong C: \ Windows \ Microsoft.NET \ ... Giải pháp của tôi cho đến nay: Loại bỏ các Mex Endpoint/PublishMetadata(). Tôi sẽ xuất bản dữ liệu meta với cấu hình ràng buộc thứ hai, nếu cần trong tương lai. –

+0

Ồ, và trước khi tôi có "Dịch vụ chia sẻ cổng Net.Tcp" bị tắt trong các dịch vụ cửa sổ của tôi. Người dùng cuối của bạn cũng có thể bị vô hiệu hóa này và có thể không được phép kích hoạt nó (và kích hoạt nó bằng cách sử dụng trình cài đặt không phải là một lựa chọn khá) –