Định cấu hình IIS Express để truy cập bên ngoài vào dự án VS2010


103

Tôi đang phát triển một dự án trong VS2010 và có thể xem trang web của tôi cục bộ qua IIS Express. Tôi muốn cho phép truy cập bên ngoài qua mạng.

Tất cả nghiên cứu của tôi đã gửi tôi đến mục blog này: http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx , rất hữu ích nhưng không dường như không hiển thị cách định cấu hình ràng buộc cho một dự án bắt đầu trong studio trực quan (Tôi không thể tìm thấy màn hình trong ảnh chụp màn hình và tôi đã chỉnh sửa thông tin ràng buộc trong applicationhost.config, nhưng nó dường như không được phản ánh khi tôi chạy trang web từ Visual Studio).


10
vui lòng đọc bài đăng trên blog của Scott Hanselman hanselman.com/blog/…
balexandre

Câu trả lời:


136

1 Sau khi chỉnh sửa tệp applicationhost.config (nằm trong thư mục IISExpress trong tài liệu của bạn), các liên kết trang web của bạn sẽ giống như bên dưới:

<bindings>
  <binding protocol="http" bindingInformation="*:8080:*" />
</bindings>

Ràng buộc bao gồm ba phần. Đầu tiên là địa chỉ IP hoặc danh sách, hoặc trong trường hợp này là ký tự đại diện. Thứ hai là số cổng và thứ ba là tên máy chủ hoặc danh sách hoặc ký tự đại diện (để lọc theo Hosttiêu đề). Đối với mục đích phát triển, ký tự đại diện là phù hợp nhất ở đây vì bạn có thể sẽ sử dụng một cổng duy nhất.

2 Bởi vì bạn đang sử dụng ràng buộc không phải localhost, các quyền bổ sung là bắt buộc. Bạn có thể chạy VS với tư cách quản trị viên hoặc tốt hơn là bạn nên thêm ACL URL để cấp các quyền cần thiết. Trong ví dụ dưới đây, quyền được cấp cho mọi người, nhưng bạn có thể sử dụng tên người dùng của riêng mình.

Lưu ý: Các urlaclphải chính xác phù hợp với ràng buộc. Vì vậy, một urlaclfor http://*:8080sẽ cho phép một ràng buộc của *:8080:*, nhưng không phải là một ràng buộc của *:8080:localhostmặc dù cái sau là một tập con của cái trước. điều này có nghĩa là nếu, thay vì sử dụng ký tự đại diện, bạn liệt kê các tiêu đề máy chủ lưu trữ applicationhost.config, bạn phải thêm một kết quả phù hợp urlaclcho từng tiêu đề.

Các bước để cấu hình HTTP.sys cho lưu lượng bên ngoài tương tự như thiết lập một trang web để sử dụng một cổng dành riêng. Trên Windows 7 hoặc Windows Vista, từ dấu nhắc lệnh nâng cao, hãy chạy lệnh sau:

netsh http add urlacl url=http://*:8080/ user=DOMAIN\username

Trên Windows XP, chạy lệnh sau từ dấu nhắc lệnh nâng cao:

httpcfg set urlacl /u http://*:8080/ /a D:(A;;GX;;;WD)

Lưu ý 2 Nếu chạy VS với tư cách quản trị viên hoặc thêm các mục ACL không giải quyết được sự cố của bạn, hãy chạy IIS Express từ dòng lệnh và kiểm tra xem có bất kỳ thông báo lỗi đăng ký ràng buộc nào không. Để bắt đầu từ dòng lệnh, hãy đưa ra lệnh sau:

iisexpress.exe /site:"your-site-name"

3 Cuối cùng, bạn sẽ cần các mục tường lửa thích hợp. Đối với điều này, dễ nhất là sử dụng bảng điều khiển "Tường lửa Windows với Bảo mật Nâng cao".

Trong "Quy tắc đến", hãy chọn "Quy tắc mới ...".

  • Loại Quy tắc là "Tùy chỉnh".
  • Chương trình là Dịch vụ-> Tùy chỉnh ...-> Chỉ áp dụng cho các dịch vụ. (Mặc dù IIS Express không phải là một dịch vụ, nhưng bộ ghép kênh HTTP mà nó sử dụng).
  • Giao thức là TCP
  • Các cổng cụ thể: Liệt kê tất cả các cổng cho tất cả các ràng buộc IIS Express của bạn. Bạn có thể quay lại quy tắc này và thêm cổng bất kỳ lúc nào. (Nếu điều này trở nên mệt mỏi, bạn có thể thêm một phạm vi như 40000-65534bao gồm toàn bộ phạm vi được Visual Studio sử dụng, nhưng lưu ý rằng điều này kém an toàn hơn).
  • Hành động là "Cho phép kết nối"
  • Hồ sơ sẽ là một trong những điều sau đây. Nếu nghi ngờ, hãy chọn "Tên miền + riêng tư".
    • "Miền", nếu máy tính của bạn là máy tính để bàn của công ty và sẽ chỉ chạy trên miền cục bộ
    • "Miền + Riêng tư" Nếu máy của bạn là máy phát triển riêng trong môi trường không phải công ty hoặc máy tính xách tay của công ty cũng cần hoạt động khi làm việc tại nhà.
    • "Miền, Riêng tư và Công khai", nếu bạn cần thực hiện các cuộc biểu tình trên các mạng không riêng tư.
  • Tên phải là "IIS Express Dev Server"

12
@ user578913 Vì vậy, cuối cùng tôi đã tìm thấy tệp applicationhost.config chính xác bằng cách mở thanh tác vụ IIS Express đang chạy và nhấp vào nó sau đó vào liên kết đến tệp cấu hình. Tôi đặt cổng thành 1063 trên dòng thứ hai, vì đó là những gì dòng đầu tiên đã được đặt thành. Chạy dòng lệnh của bạn và mọi thứ đều ổn. Khi tôi truy cập tên máy hoặc tên máy: 1063 từ một máy khác trên mạng, tôi vẫn không nhận được gì.
snumpy

15
ok, vì Visual Studio chỉ định một cổng (khác với 8080), Tường lửa của Windows đã chặn nó. Sau khi tắt Tường lửa của Windows (tôi có thể chỉ mở cổng, nhưng tôi đang ở trên một mạng an toàn) và sử dụng IP máy tính của tôi thay vì tên máy, nó đã hoạt động. Cảm ơn. Tôi muốn bỏ phiếu, nhưng chưa có đại diện = (
snumpy

3
Có, nếu Tường lửa của Windows cần được bật thì bạn thêm cổng TCP 8080 (hoặc những gì bạn sử dụng) một cách rõ ràng. Trong Windows 7, ban đầu tôi đã thử gán cổng cho "IIS Express Worker Process". Nhưng nó đã không hoạt động. Tôi đã phải sử dụng tùy chọn "Quy tắc mới" và cho phép cổng 8080. Việc chọn cấu hình (Miền, Riêng tư, Công khai) cũng rất quan trọng.
Gautam Jain

2
Lưu ý cho bản thân: Nếu bạn bị từ chối quyền truy cập, hãy chạy Visual Studio với tư cách quản trị viên .
nVentimiglia

3
Kể từ VS2015, vị trí tệp là C:\<Path\To\Solution>\.vs\config\applicationhost.config. (Cảm ơn, @Talon)
snumpy

29

Tôi cũng đã dành hàng giờ cho vấn đề này, cố gắng duyệt từ Android Xoom sang máy phát triển win7 của mình, vì vậy tôi có thể thử nghiệm một ứng dụng web asp.net mới mà tôi đã tạo. Tất cả những gì tôi đã làm là thay đổi applicationhost.config của IISExpress từ việc sử dụng PC HostName thành địa chỉ IP hiện tại của PC cho trang web mới của tôi.

<binding protocol="http" bindingInformation="*:80:dev-Lee" />

đến

<binding protocol="http" bindingInformation="*:80:192.168.1.102" /> 

Sau khi tôi thực hiện việc này và khởi động lại IISExpress ... Tôi có thể duyệt đến máy dev-Lee của mình và xem ứng dụng của tôi từ Xoom của tôi!


10
Tất cả những gì tôi nhận được với tất cả các giải pháp này là lỗi 400 - Yêu cầu không hợp lệ. Bất kỳ đề xuất?
Krumelur

2
@Krumelur, hãy đảm bảo rằng bạn chỉnh sửa đúng tệp applicationhost.config. một trong thư mục Tài liệu của tôi.
Codler

14

Chúng ta có thể thêm nhiều địa chỉ ràng buộc bằng cách chỉnh sửa applicationhost.config của IIS Express

<bindings>
   <binding protocol="http" bindingInformation="*:62217:localhost" />
   <binding protocol="http" bindingInformation="*:62217:192.168.0.5" />
   <binding protocol="http" bindingInformation="*:62218:192.168.0.5" />
</bindings>

Bây giờ chúng ta có thể truy cập trang web từ lan bằng địa chỉ IP.

Truy cập các trang địa phương từ Lan bằng IIS Express


6

Visual Studio 2013 SP1 trở lên (2015) bao gồm cài đặt "Áp dụng cài đặt máy chủ cho tất cả người dùng (lưu trữ trong tệp dự án)". Điều này được kích hoạt theo mặc định. Khi được bật, Visual Studio khởi chạy IIS Express với các đối số dòng lệnh làm cho nó sử dụng tệp cấu hình khác. Vị trí của tệp 'applicationhost.config' nằm trong thư mục dự án trong '.vs \ config'.


1
Đúng, đó là vấn đề trong trường hợp của tôi - tôi đã cố chỉnh sửa một tệp không chính xác. Khi nó xảy ra, bạn có thể xem cấu hình cho ứng dụng IIS Express của mình ở đâu bằng cách nhấp vào biểu tượng khay, liệt kê tất cả các ứng dụng và chọn của bạn. Đường dẫn đến tệp cấu hình sẽ được viết bên dưới. Của tôi ở trong .vs \ config
evilkos

1
Đúng, tôi cũng vậy. Cảm ơn rât nhiều.
Vas

2

Chúng tôi đã tạo một tiện ích mở rộng VS (2012, 2013, 2015) miễn phí có tên Conveyor cho phép điều này - bạn có thể tìm thấy nó thông qua menu Công cụ-> Tiện ích mở rộng ... trong VS hoặc trên trang web thư viện https://visualstudiogallery.msdn.microsoft. com / a429dbb7-a982-4541-b401-934375c02c0f? SRC = Trang chủ


1
Điều này thật tuyệt vời và rất dễ thiết lập. Cảm ơn vì công việc!
Powellellogram

1

Nếu bạn đang làm việc với Visual Studio, hãy làm theo các bước sau để truy cập IIS-Express qua IP-Adress:

  1. Nhận địa chỉ IP máy chủ của bạn: ipconfigtrong Dòng lệnh Windows
  2. GoTo $ (SolutionDir) .vs \ config \ applicationHost.config
  3. Tìm thấy
    <site name="WebApplication3" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" /> </application> <bindings> <binding protocol="http" bindingInformation="*:62549:localhost" /> </bindings> </site>
  4. Thêm: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    với Địa chỉ IP của bạn
  5. Chạy Visual Studio của bạn với quyền Quản trị viên và mọi thứ sẽ hoạt động
  6. Có thể tìm kiếm một số sự cố tường lửa nếu bạn cố gắng kết nối từ xa

Đầu mối là Visual Studio có tệp applicationHost.config của riêng nó!


0

Tôi đã gặp rất nhiều khó khăn để điều này hoạt động từ visual studio 2012, tôi đã chuyển từ lỗi 404 thành lỗi 503. Cuối cùng những gì làm việc cho tôi, là xóa tất cả các cấu hình liên quan trong cấu hình IIS Express ...

"\Program Files (x86)\IIS Express\appcmd.exe" list site
"\Program Files (x86)\IIS Express\appcmd.exe" delete site xxx
"\Program Files (x86)\IIS Express\appcmd.exe" delete site yyy

Sau đó, tôi đã tạo một thư mục ảo mới từ trang thuộc tính trong dự án web của mình trong VS nhưng trước khi tạo thư mục ảo, tôi đã đổi tên máy chủ thành http: // myhost: 80 / rồi nhấn nút tạo thư mục ảo. Trước đây tôi đã gặp lỗi khi nói tên máy chủ phải là 'localhost' nhưng lần này thì không. Và sau đó, nó đã hoạt động.

Tóm lại, trước tiên hãy xóa cấu hình hiện có và bắt đầu lại.


-2

Nếu miền bên ngoài của bạn là "name.mydyndns.com", thì bạn cần viết:

<binding protocol="http" bindingInformation="*:name.mydyndns.com" />

Điều này hoạt động trên Windows 2003 Server và IIS 7.5 Express.


-3

Ảnh chụp màn hình

trong nhóm ứng dụng trên IIS đặt "Bật ứng dụng 32-bit" thành "đúng".


Không chắc điều này thực sự giải quyết câu hỏi. Bạn có ý định đăng điều này trên một câu hỏi khác?
ckittel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.