2012-05-25 18 views
20

Tôi đang phát triển .Net 4.0 C# Windows Forms ứng dụng lưu trữ dịch vụ WCF trên một số cổng được xác định trước (giả sử 12345). Chúng tôi có một ứng dụng iPad khác nói chuyện với dịch vụ WCF này - và kết nối này bị chặn bởi tường lửa của cửa sổ. Người dùng của tôi luôn gặp rắc rối với nó vì họ phải nhớ thêm ứng dụng này vào danh sách ngoại lệ, v.v. - điều này gây ra sự thất vọng.cách hiển thị "Windows Firewall đã chặn một số tính năng của chương trình này" hộp thoại cho ứng dụng của tôi?

Điều gì được yêu cầu để làm cho Windows hiển thị cửa sổ bật lên như trên ảnh chụp màn hình bên dưới cho ứng dụng của tôi, để làm cho ứng dụng trở nên thân thiện hơn?

CẬP NHẬT - Tôi hiểu tôi có thể cập nhật các quy tắc trong Windows Firewall theo chương trình. Tuy nhiên, điều đó sẽ yêu cầu đặc quyền quản trị không phải lúc nào cũng khả thi. Ví dụ, tôi đang suy nghĩ về việc triển khai ClickOnce một thời gian trong tương lai - không chắc nó sẽ hoạt động như thế nào với điều này. Vì vậy, tôi vẫn tự hỏi tôi nên làm gì để có được hộp thoại đó.


SOLUTION: nhờ @alexw câu trả lời dưới đây, tôi đã có thể nhận được hộp thoại sử dụng mã đơn giản này:

IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0]; 
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 12345); 

TcpListener t = new TcpListener(ipLocalEndPoint); 
t.Start(); 
t.Stop(); 

và nhiều hơn nữa - đó là KHÔNG thể để có được popup này cho WCF dịch vụ như documentation states (xem ở dưới cùng):

Tự lưu trữ địa chỉ HTTP cho WCF không được tích hợp vào Windows tường lửa. Một ngoại lệ phải được thêm vào cấu hình tường lửa để cho phép các kết nối gửi đến bằng cách sử dụng một URL cụ thể.

enter image description here

Trả lời

1

Tôi không chắc chắn những gì điều kiện cần phải đáp ứng để lộ hộp thoại này, tôi sẽ giả định một ứng dụng mà cố gắng để mở một cổng lắng nghe trên một trường hợp vani Windows sẽ luôn luôn hiển thị hộp thoại này. Tại sao bạn không thử thêm ứng dụng của bạn vào danh sách 'các ứng dụng được ủy quyền', hoặc mở cổng bằng tay bằng cách sử dụng Windows Firewall COM interop (NetFwTypeLib)?

http://blogs.msdn.com/b/securitytools/archive/2009/08/21/automating-windows-firewall-settings-with-c.aspx

+0

cảm ơn bạn. Tôi đã cập nhật câu hỏi của mình - Tôi biết về khả năng mở cổng theo cách thủ công nhưng tôi vẫn muốn cho phép người dùng thực hiện lựa chọn một cách rõ ràng. – avs099

+0

Người dùng vẫn yêu cầu quyền quản trị để 'Cho phép truy cập' bằng dấu nhắc tường lửa của Windows. Bạn đã thử viết một chương trình đơn giản mở một cổng TCP/IP đang nghe và xem liệu nó có tạo ra một dấu nhắc không? Có lẽ bạn cần làm điều đó một thời gian ngắn trước khi dịch vụ WCF bắt đầu? –

+0

cảm ơn - đã hoạt động chính xác như bạn đã nói. Sử dụng TcpListener để bắt đầu nghe cổng sẽ hiển thị nhắc Windows Firewall. – avs099

1

Chỉ cần đoán, nhưng có lẽ bạn cần phải kích hoạt UAC quản lý quyền cho ứng dụng của bạn cho việc này để bật lên?

Kiểm tra các bài đăng trên blog về cách để làm điều đó: http://victorhurdugaci.com/using-uac-with-c-part-2/