Làm cách nào để kích hoạt các yêu cầu từ xa trong IIS Express? Scott Guthrie đã viết điều đó là có thể nhưng anh ta đã không nói như thế nào.
Làm cách nào để kích hoạt các yêu cầu từ xa trong IIS Express? Scott Guthrie đã viết điều đó là có thể nhưng anh ta đã không nói như thế nào.
Câu trả lời:
Hiện tại có một bài đăng blog trên trang web của nhóm IIS giải thích cách bật kết nối từ xa trên IIS Express . Đây là phần thích hợp của bài viết đó được tóm tắt:
Trên Vista và Win7, hãy chạy lệnh sau từ dấu nhắc quản trị:
netsh http add urlacl url=http://vaidesg:8080/ user=everyone
Đối với XP, trước tiên hãy cài đặt Công cụ hỗ trợ Windows XP Service Pack 2. Sau đó chạy lệnh sau từ dấu nhắc hành chính:
httpcfg set urlacl /u http://vaidesg1:8080/ /a D:(A;;GX;;;WD)
netsh
lệnh để cho phép kết nối trên bất kỳ tên máy chủ?
user={PARAM_USER}
sẽ là ngôn ngữ của riêng bạn.
user=todos
thay vì user=everyone
.
Có ba thay đổi bạn có thể cần thực hiện.
.config
tập tin của bạn . Điển hình là:
$(solutionDir)\.vs\config\applicationhost.config
%userprofile%\My Documents\IISExpress\config\applicationhost.config
Tìm yếu tố ràng buộc trang web của bạn và thêm
<binding protocol="http" bindingInformation="*:8080:*" />
netsh http add urlacl url=http://*:8080/ user=everyone
Trong trường hợp everyone
là một nhóm các cửa sổ. Sử dụng dấu ngoặc kép cho các nhóm có khoảng trắng như "Tout le monde".
Cho phép IIS Express thông qua tường lửa Windows.
Bắt đầu / Tường lửa Windows với Bảo mật nâng cao / Quy tắc gửi đến / Quy tắc mới ...
Chương trình
%ProgramFiles%\IIS Express\iisexpress.exe
HOẶC Cổng 8080 TCP
Bây giờ khi bạn bắt đầu, iisexpress.exe
bạn sẽ thấy một thông báo như
URL đã đăng ký thành công "http: // *: 8080 /" cho trang web "hello world" ứng dụng "/"
users=everyone
cho netsh
(bước thứ hai) có thể gây ra lỗi 1789. Giải pháp là dịch everyone
sang tên nhóm tương ứng trong ngôn ngữ của bạn.
Project Url
, nếu tôi nhập dấu hoa thị cho tên máy chủ thì nó sẽ báo lỗi. Nếu tôi nhập bất cứ thứ gì khác, nó sẽ cố gắng tạo một thư mục ảo mới. Nó không liên kết đến mục trong application.config.
bindingInformation="*:8080:hostname"
và bước 2 url=http://hostname:8080/
và trong các thuộc tính dự án web Visual Studio của bạn trên tab Web đặt Project Url thành http://hostname:8080/
. Xóa *
urlacl nếu bạn đã tạo; nó sẽ không hoạt động nếu bạn có cả hai. Cuối cùng, URL mà bạn truy cập trong trình duyệt web của bạn phải tham chiếu tên máy chủ, không phải localhost.
<binding protocol="http" bindingInformation="*:8080:localhost" />
Tôi nhớ đã gặp phải những vấn đề tương tự trong khi thử quy trình công việc này vài tháng trước.
Đó là lý do tại sao tôi đã viết một tiện ích proxy đơn giản dành riêng cho loại kịch bản này: https://github.com/icflorescu/iothypress-proxy .
Sử dụng Proxy IIS Express , tất cả trở nên khá đơn giản - không cần đến Nets Netsh http thêm urlacl url = vaidesg: 8080 / user = mọi người, hoặc gây rối với ứng dụng của bạn trên ứng dụng.
Chỉ cần đưa ra điều này trong dấu nhắc lệnh:
iisexpress-proxy 8080 to 3000
Sau đó, bạn có thể trỏ các thiết bị từ xa của mình tới http: // vaidesg: 3000 .
Hầu hết thời gian đơn giản hơn IS tốt hơn.
Không có gì làm việc cho tôi cho đến khi tôi tìm thấy iothypress-proxy .
Mở dấu nhắc lệnh với tư cách quản trị viên, sau đó chạy
npm install -g iisexpress-proxy
sau đó
iisexpress-proxy 51123 to 81
giả sử dự án Visual Studio của bạn mở trên localhost: 51123 và bạn muốn truy cập vào địa chỉ IP bên ngoài xxxx: 81
Chỉnh sửa: Tôi hiện đang sử dụng ngrok
Như một sidenote cho điều này:
netsh http add urlacl url=http://vaidesg:8080/ user=everyone
Điều này sẽ chỉ hoạt động trên các phiên bản tiếng Anh của Windows. Nếu bạn đang sử dụng phiên bản được bản địa hóa, bạn phải thay thế "mọi người" bằng một thứ khác, ví dụ:
Nếu không, bạn sẽ gặp lỗi (Tạo SDDL không thành công, Lỗi: 1332)
Một tài nguyên tốt là Làm việc với SSL tại Thời gian phát triển dễ dàng hơn với IISExpress của Scott Hanselman.
Những gì bạn đang theo đuổi là phần Bắt IIS Express phục vụ bên ngoài qua Cổng 80
Nếu bạn đang làm việc với Visual Studio thì hãy làm theo các bước sau để truy cập IIS-Express qua IP-Adress:
ipconfig
trong Dòng lệnh WindowsĐi đến
$(SolutionDir)\.vs\config\applicationHost.config
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>
Thêm:
<binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
với Địa chỉ IP của bạn
Tôi đã giải quyết nó bằng cách cài đặt "Băng tải bằng Keyoti" trong Visual Studio Professional 2015. Băng tải tạo một địa chỉ XÓA (IP của bạn) với một cổng (45455) cho phép yêu cầu bên ngoài. Thí dụ:
Băng tải cho phép bạn kiểm tra các ứng dụng web từ máy tính bảng và điện thoại bên ngoài trên mạng hoặc từ trình giả lập Android (không có http://10.0.2.2:<hostport>
)
Các bước trong liên kết sau:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
Nếu bạn đã thử câu trả lời của Đại tá Panic nhưng không hoạt động trong Visual Studio, hãy thử điều này:
Nối một cái khác <binding />
trong cấu hình IIS Express của bạn
<bindings>
<binding protocol="http" bindingInformation="*:8080:localhost" />
<binding protocol="http" bindingInformation="*:8080:hostname" />
</bindings>
Cuối cùng, bạn phải chạy Visual Studio với tư cách Quản trị viên
Điều đã giúp tôi, là nhấp chuột phải vào biểu tượng 'IISExpress', 'Hiển thị tất cả các ứng dụng'. Sau đó chọn trang web và tôi thấy aplicationhost.config sử dụng trang web nào và việc sửa lỗi diễn ra hoàn hảo.
Đây là những gì tôi đã làm cho Windows 10 với Visual Studio 2015 để cho phép truy cập từ xa, cả với http và https:
Bước đầu tiên là liên kết ứng dụng của bạn với địa chỉ IP nội bộ của bạn. Chạy cmd
-> ipconfig
để lấy địa chỉ. Mở tệp /{project folder}/.vs/config/applicationhost.config
và cuộn xuống cho đến khi bạn tìm thấy một cái gì đó như thế này:
<site name="Project.Web" id="2">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\Project\Project.Web" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:12345:localhost" />
</bindings>
</site>
Thêm hai ràng buộc mới dưới bindings
. Bạn cũng có thể sử dụng HTTPS nếu muốn:
<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />
Thêm quy tắc sau vào tường lửa của bạn, mở cmd
lời nhắc mới với tư cách quản trị viên và chạy các lệnh sau:
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=12345 profile=private remoteip=localsubnet action=allow
netsh advfirewall firewall add rule name="IISExpressWebHttps" dir=in protocol=tcp localport=44300 profile=private remoteip=localsubnet action=allow
Bây giờ bắt đầu Visual Studio như Administrator
. Nhấp chuột phải vào tệp dự án dự án web và chọn Properties
. Chuyển đến Web
tab và nhấp Create Virtual Directory
. Nếu Visual Studio không chạy với tư cách Quản trị viên, điều này có thể sẽ thất bại. Bây giờ mọi thứ nên làm việc.
Câu trả lời được chấp nhận cho câu hỏi này là một hướng dẫn để IIS Express hoạt động với webmatrix. Tôi thấy hướng dẫn này hữu ích hơn khi cố gắng làm cho nó hoạt động với VS 2010.
Tôi chỉ làm theo các bước 3 & 4 (chạy IIS Express với tư cách quản trị viên) và phải tạm thời vô hiệu hóa tường lửa của mình để nó hoạt động.
Bạn có thể thử thiết lập chuyển tiếp cổng thay vì cố gắng sửa đổi cấu hình IIS Express của mình, thêm quy tắc HTTP.sys mới hoặc chạy Visual Studio với tư cách Quản trị viên.
Về cơ bản bạn cần chuyển tiếp IP:PORT
trang web của bạn chạy đến một số cổng miễn phí khác trên máy của bạn nhưng trên bộ điều hợp mạng bên ngoài, không phải localhost.
Vấn đề là IIS Express (ít nhất là trên Windows 10) liên kết với [::1]:port
nghĩa là nó lắng nghe trên cổng IPv6. Bạn cần phải tính đến điều này.
Đây là cách tôi thực hiện công việc này - http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html
Hy vọng nó giúp.
Cách đơn giản nhất và thú vị nhất mà tôi tìm thấy là sử dụng (mất 2 phút để thiết lập):
Nó sẽ hoạt động với bất cứ thứ gì chạy trên localhost. Chỉ cần đăng ký, chạy ít ưu đãi và bất cứ điều gì bạn chạy trên localhost đều nhận được URL công khai mà bạn có thể truy cập từ bất cứ đâu.
Điều này tốt cho việc hiển thị nội dung cho các đồng đội từ xa của bạn, không phải lo lắng với thiết lập IIS hoặc tường lửa. Muốn dừng truy cập chỉ cần chấm dứt thực thi.
ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ngrok http -host-header=localhost 89230
giả sử rằng 89230 là cổng IIS Express của bạn
Bạn cũng có thể chạy nhiều cổng ngay cả trên gói miễn phí
Tôi có một số vấn đề khi sử dụng IIS Express trong Win 8.1 và yêu cầu bên ngoài.
Tôi làm theo các bước này để gỡ lỗi yêu cầu bên ngoài:
Nó đang hoạt động!
Nếu bạn chạy Visual Studio từ Admin, bạn có thể thêm
<binding protocol="http" bindingInformation="*:8080:*" />
hoặc là
<binding protocol="https" bindingInformation="*:8443:*" />
vào
%userprofile%\My Documents\IISExpress\config\applicationhost.config
$(SolutionDir).vs\config\applicationHost.config
và tôi cũng phải mở cổng (8443) của ứng dụng trong tường lửa Windows.
Tôi đã kích hoạt IIS cục bộ vì vậy tôi chỉ tạo quy tắc ghi lại vào cổng gỡ lỗi của mình ... Tôi nghĩ rằng cách này tốt hơn và mát hơn phương pháp khác vì dễ xóa hơn khi phát triển xong ... Đây là cách viết lại. .
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="^dev/(.*)" />
<action type="Rewrite" url="http://localhost:47039/{R:1}" />
</rule>
</rules>
</rewrite>
VS cũng cho phép bạn phát triển trực tiếp bằng IIS cục bộ (sau đó cho phép kết nối từ xa) nhưng đến lượt bạn, bạn phải luôn chạy nó với tư cách quản trị viên ... Tôi không thích điều đó.
Tôi đã giải quyết vấn đề này bằng cách sử dụng phương pháp proxy ngược.
Tôi đã cài đặt máy chủ wamp và sử dụng tính năng proxy ngược đơn giản của máy chủ web apache.
Tôi đã thêm một cổng mới để nghe máy chủ web Apache (8081). Sau đó, tôi đã thêm cấu hình proxy như virtualhost cho cổng đó.
<VirtualHost *:8081>
ProxyPass / http://localhost:46935/
ProxyPassReverse / http://localhost:46935/
</VirtualHost>
Tôi đã làm tất cả các bước này và không có gì giúp tôi. Và những gì tôi cần, chỉ là chạy ứng dụng của tôi thông qua IIS Express ...
Hy vọng nó giúp.
Tôi không thể phục vụ các yêu cầu iis cho những người dùng khác trong mạng cục bộ của mình, tất cả những gì tôi phải làm (ngoài những điều trên) là khởi động lại bộ định tuyến BT Hub của tôi.
Điều này cực kỳ tuyệt vời và thậm chí bao gồm HTTPS với các tên miền đẹp:
http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx
Các phần thực sự tuyệt vời mà tôi không thể tìm thấy ở bất kỳ nơi nào khác trên SO trong trường hợp liên kết ở trên biến mất:
> C:\Program Files (x86)\IIS Express>IisExpressAdminCmd.exe Usage:
> iisexpressadmincmd.exe <command> <parameters> Supported commands:
> setupFriendlyHostnameUrl -url:<url>
> deleteFriendlyHostnameUrl -url:<url>
> setupUrl -url:<url>
> deleteUrl -url:<url>
> setupSslUrl -url:<url> -CertHash:<value>
> setupSslUrl -url:<url> -UseSelfSigned
> deleteSslUrl -url:<url>
>
> Examples: 1) Configure "http.sys" and "hosts" file for friendly
> hostname "contoso": iisexpressadmincmd setupFriendlyHostnameUrl
> -url:http://contoso:80/ 2) Remove "http.sys" configuration and "hosts" file entry for the friendly hostname "contoso": iisexpressadmincmd
> deleteFriendlyHostnameUrl -url:http://contoso:80/
Tiện ích trên sẽ đăng ký chứng chỉ SSL cho bạn! Nếu bạn sử dụng tùy chọn -UseSelfSign, nó cực dễ.
Nếu bạn muốn thực hiện mọi thứ một cách khó khăn, phần không rõ ràng là bạn cần cho HTTP.SYS biết nên sử dụng chứng chỉ nào, như thế này:
netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE
Certhash là "Thumbprint" bạn có thể nhận được từ các thuộc tính chứng chỉ trong MMC.
Tôi đã làm như sau và có thể kết nối:
1) đã thay đổi ràng buộc cấu hình IIS express từ máy chủ cục bộ thành '*'
giao thức ràng buộc = "http" bindIn information = "*: 8888: *"
2) Xác định quy tắc gửi đến trên tường lửa để cho phép cổng cụ thể cho loại giao thức: tcp
3) Thêm lệnh sau để thêm cấu hình mạng cho cổng của bạn: Netsh http thêm urlacl url = http: // *: 8888 / user = mọi người
[hộp thoại thuộc tính dự án]
Để phát triển bằng VisualStudio 2017 và dự án API NetCore:
1) Trong Cmd-Box: ipconfig / all để xác định địa chỉ IP
2a) Nhập địa chỉ IP đã truy xuất trong Thuộc tính dự án-> Tab gỡ lỗi
2b) Chọn Cổng và gắn địa chỉ đó vào địa chỉ IP từ bước 2a.
3) Thêm quy tắc cho phép trong tường lửa để cho phép lưu lượng TCP đến trên Cổng đã chọn (tường lửa của tôi được kích hoạt bằng hộp thoại: "Chặn hoặc thêm quy tắc vào tường lửa"). Thêm ý chí trong trường hợp đó làm thủ thuật.
Nhược điểm của giải pháp trên:
1) Nếu bạn sử dụng địa chỉ IP động, bạn cần làm lại các bước trên trong trường hợp địa chỉ IP khác đã được chỉ định.
2) Máy chủ của bạn hiện có một Cổng mở mà bạn có thể quên, nhưng cổng mở này vẫn là một lời mời cho những vị khách không mời.