Kết nối với máy chủ gỡ lỗi Visual Studio IIS Express qua mạng lan


84

Tôi có một ứng dụng ASP.NET MVC3 thử nghiệm được phát triển trong VS2012. Khi tôi bắt đầu gỡ lỗi, ứng dụng được truy cập từ máy chủ thông qua yêu cầu http://localhost:<portnumber>. Nhưng nếu tôi cố gắng truy cập cùng một ứng dụng từ máy tính từ xa trong mạng nội bộ thông qua ứng dụng http://<ip>:<portnumber>Tôi nhận được HTTP error 400: Bad request. Invalid Host Name.Khi nó chạy trên IIS Express, bất kỳ cấu hình máy chủ nào đều không thể truy cập được.

Có bất kỳ cách nào để giải quyết điều này?


Sử dụng tiện ích mở rộng miễn phí của chúng tôi, Conveyor để thực hiện điều này marketplace.visualstudio.com/…. Nó hoạt động mà không có bất kỳ thay đổi cấu hình nào, không gây đau đớn.
Jim W nói hãy phục hồi Monica vào

Câu trả lời:


138

Cập nhật

Tôi đã tạo một video mô tả rõ hơn quy trình, https://youtu.be/5ZqDuvTqQVs

Nếu bạn đang sử dụng Visual Studio 2013 trở lên, hãy đảm bảo bạn chạy nó với tư cách quản trị viên để ứng dụng này hoạt động.


Mở %USERPROFILE%\My Documents\IISExpress\config\applicationhost.configtệp (trong VS2015 có thể là $(solutionDir)\.vs\config\applicationhost.config). Bên trong, bạn sẽ thấy một cái gì đó như thế này:

<site name="WebSite1" id="1" serverAutoStart="true">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:8080:localhost" />
    </bindings>
</site>

Thay đổi bindingInformation=":8080:localhost"thành bindingInformation="*:8080:*"(số cổng, 8080 trong trường hợp của tôi, sẽ khác.)

Lưu ý: Nếu nó không hoạt động, hãy thử với bindingInformation="*:8080:asterix có thể được gỡ bỏ.

Sau đó, hãy đảm bảo rằng tường lửa của bạn đang cho phép các kết nối đến trên cổng đó. Bạn có thể phải khởi động lại hệ thống hoặc ít nhất là Visual Studio để IISExpress tải lại tệp cấu hình.

Nếu cách này không hiệu quả, hãy xem câu trả lời sau: https://stackoverflow.com/a/5186680/985284


30
Giải pháp này đã không làm việc cho tôi. Trong VS2013, sau khi sửa đổi các thuộc tính bindingInformation, khi tôi mở IDE và tải dự án nó tạo ra một mục mới (ví dụ <site name="Website1(1)" id="2" serverAutoStart="true">và tôi vẫn không thể truy cập vào các trang web từ compuer khác.
Yvan Ecarri

5
Điều này đã làm việc cho tôi trong VS2013: gilesey.wordpress.com/2013/04/21/…
Jay Cummins

10
Làm việc cho tôi. Tinh chỉnh chính là chạy visual studio với tư cách quản trị viên.
Tanmay Mandal

20
Tôi không biết tại sao tôi dường như là người duy nhất gặp vấn đề này, nhưng bindingInformation="*:8080:*"không hiệu quả với tôi và dẫn đến sự cố @ Y.Ecarri đang gặp phải. Có gì cuối cùng đã kết thúc làm việc đã giảm các dấu sao: bindingInformation=":8080:". Cậu bé đã làm điều này khiến tôi phát điên, tôi hy vọng nó sẽ giúp được ai đó.
Drazen Bjelovuk

5
Tương tự như Drazen, đã phải sử dụng chế độ quản trị + bindingInformation=":8080:"(không có *)
Matthieu Charbonnier

42

VisualStudio 2015 không phải quản trị viên

  1. Trong dir giải pháp của bạn, trong tệp .vs\config\applicationHost.configthay đổi dòng

    <binding protocol="http" bindingInformation="*:44302:localhost" />

    đến

    <binding protocol="http" bindingInformation=":44302:" />

    (nơi 44302 là cổng của bạn)


  1. Từ dấu nhắc lệnh quản trị:

    Tôi. Cho phép người không phải quản trị viên liên kết với cổng

    netsh http add urlacl url=http://*:44302/ user=Everyone

    ii. Cho phép thông qua tường lửa

    netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow


  1. Bắt đầu gỡ lỗi từ VisualStudio

Lưu ý rằng thư mục .vs bị ẩn trên windows 10. Hiển thị các tệp ẩn để xem.
bhathiya-perera

Oh! Bạn là người hùng của tôi! CUỐI CÙNG! Chìa khóa là cấu hình của thư mục .vs. Không thể cảm ơn đủ!
twsmale

Lưu ý như mentiod @ArunPrasadES bên dưới, hãy chạy VS với tư cách quản trị viên nếu bạn gặp lỗi.
Elmer

@Elmer Chạy IDE của bạn và gỡ lỗi các chương trình của bạn với tư cách quản trị viên nói chung là một ý tưởng tồi (với một số ngoại lệ hẹp). Quan trọng nhất, nó che giấu các vấn đề về quyền trong quá trình phát triển (khi chúng dễ dàng được sửa), điều này cuối cùng khiến chương trình của bạn (không cần thiết) yêu cầu được chạy với tư cách quản trị viên - những thứ như lưu tệp ở vị trí chỉ dành cho quản trị viên, v.v. Tốt hơn là chỉ khắc phục sự cố với IDE và / hoặc quyền điều hành / người dùng của bạn.
gregmac

@gregmac Xin lỗi vì nhận xét không hay, ý tôi là IIS của tôi có vấn đề nếu tôi thay đổi các tùy chọn ràng buộc và không chạy VS với tư cách Quản trị viên, một số ID lỗi quy trình, mà tôi cho rằng có liên quan đến quyền của Windows 10 vì tôi có một Windows mới. 10 cài đặt với cài đặt VS 2019 mới. Về phần còn lại, tôi đồng ý với bạn 100%
Elmer

21

Ngoại trừ việc sửa đổi tệp cấu hình iisexpress, đôi khi bạn cũng cần chạy lệnh như bên dưới.

netsh http thêm urlacl url = http: // *: 49419 / user = Mọi người


Cổng 49419 có công dụng gì? Đó chỉ là một cổng ví dụ, đó cũng có thể là 8080?
oligofren

Trả lời câu hỏi của riêng tôi: vâng, đó là cổng mà ứng dụng đang chạy. Nếu bạn sử dụng câu trả lời này, thì bạn không cần chạy Visual STudio với tư cách quản trị viên nữa.
oligofren

1
Bạn có thể vui lòng cung cấp một lời giải thích ngắn gọn về cách nó hoạt động không?
Shishir Gupta

12

Cách tránh chạy Visual Studio với tư cách quản trị viên

Sử dụng cả câu trả lời của Garret@ shangkeyun, bạn có thể kết nối với trang web đang chạy mà không cần chạy Visual Studio với tư cách là người dùng quản trị:

  1. Mở %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
  2. Tìm kiếm trang web của bạn bằng name=MySiteName
  3. Nhân bản <binding>mục hiện có trong <bindings>phần. Bây giờ bạn sẽ có hai dòng với binding.
  4. Loại bỏ phần "localhost" trong bindInformation.
  5. Bây giờ nó sẽ giống như thế này, giả sử cổng là 12345:

    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:" />
    
  6. Cho phép người không phải quản trị viên liên kết với cổng

    netsh http add urlacl url=http://*:12345/ user=Everyone
    

CHỈNH SỬA 2019: gregmac đã thêm một bước để đưa phiên bản VS vào danh sách trắng. Tôi chưa bao giờ cần điều này, nhưng vẫn liệt kê nó:

  1. netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow

6
Thêm netsh đã thay đổi lỗi thành 'Dịch vụ không khả dụng'
tofutim

@tofutim giống nhau ở đây. Bạn đã tìm thấy một giải pháp?
frostymarvelous

Bạn có khởi động lại Visual Studio sau đó không?
oligofren

Xin chào, tôi chỉ nhận thấy lệnh netsh không chính xác khi kết hợp với các dòng trước đó. Tôi đã sử dụng 12345 làm cổng ở trên, nhưng đã sử dụng 49419 làm cổng ví dụ trong lệnh netsh. Điều này đã được sửa trong bản cập nhật của tôi.
oligofren

10

Vì tôi không thể thêm nhận xét vào bài đăng của @Garret Fogerlie và để giải quyết vấn đề của người nhận xét (@ Y.Ecarri và @SamuelEdwinWard), tôi đã làm theo những gì Garret đề xuất, sử dụng Visual Studio 2013, chạy nó ở chế độ Quản trị và thay đổi application.configtập tin.

Sau khi khởi chạy gỡ lỗi và thấy rằng tôi nhận được thông báo lỗi tương tự, tôi đã quay lại application.config và thấy rằng một mục mới cho trang web của tôi đã được tạo giống như vấn đề của Y.Ecarri.

Vì vậy, tôi đã ngừng gỡ lỗi, giữ cho giải pháp của tôi mở trong Visual Studio và chỉnh sửa lại application.configtệp cho mục nhập mới. Tôi cũng chỉ đơn giản là loại bỏ các *bài hát và localhosthoàn toàn, vì vậy tôi có những thứ sau cho mục mới:

<binding protocol="https" bindingInformation=":44300:" />


Đây là giải pháp duy nhất đã giúp! Cảm ơn.
code5

2

Một số bạn có thể dành nhiều thời gian sửa đổi và thử nghiệm bằng cách sử dụng thư mục% USERPROFILE% của mình. Nếu bạn đang chạy trên VS debug , hãy sử dụng $ (solutionDir) .vs \ config \ applicationhost.config


1

Cảm ơn byteit:

Truy cập applicationhost.config trong Documents / IISExpress / config

tìm mục nhập cho trang web cụ thể mà bạn đang làm việc:

thêm vào:

<binding protocol="http" bindingInformation="*:<your site port>:*" />

ở phía trước của hiện tại

 <binding protocol="http" bindingInformation="*:<your site port>:localhost" />

Để đạt được giải pháp mà không cần VS2013, hãy tạo một mục xml trang web mới cho bạn khi bạn khởi động lại. Bạn sẽ cần chạy với tư cách quản trị viên.


1

Sau các cấu hình trên, tôi phải chạy Visual Studio ở Chế độ quản trị.

nhập mô tả hình ảnh ở đây


0

Đây là những gì làm việc cho tôi:

  • Khởi động Trình quản lý IIS
  • Thêm một thư mục ảo mới trỏ đến thư mục dự án ( C:\VSProjectstrong trường hợp của tôi)
  • Chọn thư mục ảo mới trong trình quản lý IIS. Chọn Directory Browsingtừ danh sách các tùy chọn. Ở phía bên phải có một Enablenút. Nhấp vào nó.

Bây giờ tôi có thể truy cập thư mục và thùng dự án của mình trên mạng thông qua mypcname\VSProjects\myProj\outputBinViewer.


0

Gặp sự cố rất tương tự khi gỡ lỗi trong Visual Studio Code , tôi đã giải quyết nó bằng cách thêm:

"env": {
      // ...
      "ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
      // ...
},

.. đến khởi chạy.json

Rõ ràng, theo mặc định, nó liên kết giao thức http với 'localhost: 5000', vì vậy nó hoạt động với localhost nhưng không hoạt động với địa chỉ ip - không từ xa hay cục bộ.

Nếu bạn đang cố gắng đạt được điểm dừng bởi một yêu cầu đến từ một máy tính khác, đừng quên kiểm tra cài đặt tường lửa của bạn (và / hoặc chống vi-rút)

hi vọng điêu nay co ich

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.