2013-03-15 37 views
6

Tôi đang bối rối là lý do tại sao một số hoạt động. Tôi đang định cấu hình dịch vụ wcf như sau:Điểm cuối dịch vụ WCF nhầm lẫn cục bộ

<services> 
    <service name="ClientCommand" behaviorConfiguration="SomeServiceBehavior"> 
    <endpoint contract="IClientCommand" binding="netTcpBinding" BindingConfiguration="TcpPort" address="net.tcp://localhost:1304" /> 
    </service> 
</services> 

BindingConfiguration and behaviorConfiguration rất đơn giản, chỉ cần định cấu hình một số thời gian chờ.

Trong exe của tôi, tôi bắt đầu lưu trữ như thế này.

_serverHost = new ServiceHost(type); // implementing IClientCommand 
_serverHost.Open(); 

Thật đơn giản và nó hoạt động, tôi có thể gọi dịch vụ này từ một máy tính khác. Tuy nhiên, sau khi đọc về một vấn đề khác (nghe trên ổ cắm tcp), tôi có ấn tượng rằng nó không hoạt động. Vì tôi đang ràng buộc với localhost dịch vụ không nên truy cập được từ bên ngoài máy tính đang chạy?
Tôi đã kiểm tra netstat trên máy tính và nó đã liên kết với địa chỉ ip "0.0.0.0" thay vì "127.0.0.1" giải thích lý do tại sao nó hoạt động từ một máy tính khác.

Nhưng tôi không hiểu tại sao nó chuyển từ localhost sang "0.0.0.0"?

+0

Tôi đã đào sâu hơn một chút, chỉ để trở nên bối rối hơn. Nếu tôi sử dụng 'net.tcp: // 127.0.0.1/service', nó sẽ thực sự liên kết với loopback và nó sẽ không thể truy cập từ bên ngoài của máy tính. Tuy nhiên 'net.tcp: // localhost/service' sẽ liên kết với 0.0.0.0 và có thể truy cập từ bên ngoài vòng lặp. Tại sao? – Greuntesop

Trả lời

0

Net.tcp không bị hạn chế giao tiếp trên một máy, có lẽ bạn đang nghĩ đến net.pipe? Về 0.0.0.0: Làm thế nào là các tập tin máy chủ được xác định trên máy chạy dịch vụ? Here là một bài viết hay về WCF nói chung.

+0

Xin chào, tôi không nói net.tcp bị hạn chế giao tiếp trên một máy. Tôi nói rằng nếu bạn sử dụng net.tcp: // localhost: ... nó phải được ràng buộc với địa chỉ loopback và không thể truy cập từ bên ngoài máy tính. Nhưng nó là. – Greuntesop

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