ฉันจะเปิดใช้งานการร้องขอระยะไกลใน IIS Express ได้อย่างไร Scott Guthrie เขียนว่าเป็นไปได้แต่เขาไม่ได้พูดอย่างนั้น
ฉันจะเปิดใช้งานการร้องขอระยะไกลใน IIS Express ได้อย่างไร Scott Guthrie เขียนว่าเป็นไปได้แต่เขาไม่ได้พูดอย่างนั้น
คำตอบ:
มีบล็อกโพสต์ขึ้นบนเว็บไซต์ทีม IIS ตอนนี้อธิบายวิธีการเปิดใช้งานการเชื่อมต่อระยะไกลบน IIS ด่วน นี่คือส่วนที่เกี่ยวข้องของการโพสต์สรุป:
บน Vista และ Win7 ให้เรียกใช้คำสั่งต่อไปนี้จากพรอมต์การจัดการ:
netsh http add urlacl url=http://vaidesg:8080/ user=everyone
สำหรับ XP ขั้นแรกให้ติดตั้งเครื่องมือสนับสนุน Windows XP Service Pack 2 จากนั้นเรียกใช้คำสั่งต่อไปนี้จากพรอมต์การดูแลระบบ:
httpcfg set urlacl /u http://vaidesg1:8080/ /a D:(A;;GX;;;WD)
netsh
คำสั่งเพื่อให้การเชื่อมต่อบนใด ๆชื่อโฮสต์?
user={PARAM_USER}
จะเป็นภาษาของคุณเอง
user=todos
user=everyone
คุณอาจต้องทำการเปลี่ยนแปลงสามอย่าง
.config
ไฟล์ของคุณ โดยปกติ:
$(solutionDir)\.vs\config\applicationhost.config
%userprofile%\My Documents\IISExpress\config\applicationhost.config
ค้นหาองค์ประกอบการรวมเว็บไซต์ของคุณและเพิ่ม
<binding protocol="http" bindingInformation="*:8080:*" />
netsh http add urlacl url=http://*:8080/ user=everyone
everyone
กลุ่ม windows อยู่ที่ไหน ใช้เครื่องหมายคำพูดคู่สำหรับกลุ่มที่มีช่องว่างเช่น "Tout le monde"
อนุญาตให้ IIS Express ผ่านไฟร์วอลล์ Windows
เริ่ม / ไฟร์วอลล์ Windows ด้วยความปลอดภัยขั้นสูง / กฎขาเข้า / กฎใหม่ ...
โปรแกรม
%ProgramFiles%\IIS Express\iisexpress.exe
หรือพอร์ต 8080 TCP
ตอนนี้เมื่อคุณเริ่มiisexpress.exe
คุณควรเห็นข้อความเช่น
URL ที่ลงทะเบียนเรียบร้อยแล้ว "http: // *: 8080 /" สำหรับไซต์ "hello world" แอปพลิเคชัน "/"
users=everyone
สำหรับnetsh
(ขั้นตอนที่สอง) อาจทำให้เกิดข้อผิดพลาด 1789 วิธีแก้ไขคือแปลeveryone
เป็นชื่อกลุ่มที่เกี่ยวข้องในภาษาของคุณ
Project Url
ถ้าฉันใส่เครื่องหมายดอกจันสำหรับชื่อโฮสต์จะให้ข้อผิดพลาด หากฉันป้อนสิ่งอื่นใดก็จะพยายามสร้างไดเรกทอรีเสมือนใหม่ มันไม่ได้ลิงค์ไปยังรายการใน application.config
bindingInformation="*:8080:hostname"
และขั้นตอนที่ 2 url=http://hostname:8080/
และใน Visual Studio คุณสมบัติของโครงการเว็บของคุณในเว็บแท็บตั้งโครงการ URL http://hostname:8080/
ไปยัง ลบ*
urlacl หากคุณสร้างไว้แล้ว มันจะไม่ทำงานถ้าคุณมีทั้งคู่ สุดท้าย URL ที่คุณไปในเว็บเบราว์เซอร์ของคุณจะต้องอ้างอิงชื่อโฮสต์ไม่ใช่โลคอลโฮสต์
<binding protocol="http" bindingInformation="*:8080:localhost" />
ฉันจำได้ว่าพบปัญหาเดียวกันในขณะที่พยายามเวิร์กโฟลว์นี้เมื่อไม่กี่เดือนที่ผ่านมา
ซึ่งเป็นเหตุผลที่ผมเขียนยูทิลิตี้พร็อกซี่ที่เรียบง่ายโดยเฉพาะสำหรับชนิดของสถานการณ์นี้: https://github.com/icflorescu/iisexpress-proxy
การใช้IIS Express Proxyทั้งหมดจะกลายเป็นเรื่องง่าย - ไม่จำเป็นต้อง“ netsh http เพิ่ม urlacl url = vaidesg: 8080 / ผู้ใช้ = ทุกคน” หรือทำกับ“ applicationhost.config” ของคุณ
เพียงแค่ออกในพรอมต์คำสั่ง:
iisexpress-proxy 8080 to 3000
... แล้วคุณสามารถชี้อุปกรณ์ระยะไกลของคุณเพื่อhttp: // vaidesg: 3000
ส่วนใหญ่แล้วจะง่ายกว่าดีกว่า
ไม่มีอะไรทำงานให้ฉันจนกว่าฉันจะพบiisexpress-พร็อกซี่
เปิดพร้อมท์คำสั่งในฐานะผู้ดูแลระบบจากนั้นเรียกใช้
npm install -g iisexpress-proxy
แล้วก็
iisexpress-proxy 51123 to 81
สมมติว่าโครงการ Visual Studio ของคุณเปิดใน localhost: 51123 และคุณต้องการเข้าถึงที่อยู่ IP ภายนอก xxxx: 81
แก้ไข: ฉันกำลังใช้ ngrok
ในฐานะที่เป็น sidenote นี้:
netsh http add urlacl url=http://vaidesg:8080/ user=everyone
สิ่งนี้จะใช้ได้กับ Windows รุ่นภาษาอังกฤษเท่านั้น หากคุณใช้เวอร์ชันที่แปลเป็นภาษาท้องถิ่นคุณต้องแทนที่ "ทุกคน" ด้วยอย่างอื่นเช่น:
มิฉะนั้นคุณจะได้รับข้อผิดพลาด (สร้าง SDDL ล้มเหลวข้อผิดพลาด: 1332)
ทรัพยากรที่ดีคือการทำงานกับ SSL ในเวลาพัฒนานั้นง่ายกว่าด้วย IIS Expressโดย Scott Hanselman
สิ่งที่คุณตามมาคือส่วนการให้ IIS Express ไปใช้งานภายนอกพอร์ต 80
หากคุณกำลังทำงานกับ Visual Studio ให้ทำตามขั้นตอนเหล่านี้เพื่อเข้าถึง IIS-Express ผ่านที่อยู่ IP:
ipconfig
ใน Windows Command Lineไปที่
$(SolutionDir)\.vs\config\applicationHost.config
หา
<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>
เพิ่ม:
<binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
ด้วยที่อยู่ IP ของคุณ
ฉันแก้ไขด้วยการติดตั้ง "Conveyor by Keyoti" ใน Visual Studio Professional 2015 เครื่องลำเลียงสร้างที่อยู่ REMOTE (IP ของคุณ) ด้วยพอร์ต (45455) ที่เปิดใช้งานคำขอภายนอก ตัวอย่าง:
Conveyor ช่วยให้คุณทดสอบเว็บแอปพลิเคชันจากแท็บเล็ตภายนอกและโทรศัพท์ในเครือข่ายของคุณหรือจาก Android emulators (โดยไม่ต้อง http://10.0.2.2:<hostport>
)
ขั้นตอนอยู่ในลิงค์ต่อไปนี้:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
หากคุณลองคำตอบของพันเอก Panic แล้วแต่ไม่สามารถใช้งานได้ใน Visual Studio ให้ลองทำดังนี้:
ผนวกรายการอื่น<binding />
ในการกำหนดค่า IIS Express ของคุณ
<bindings>
<binding protocol="http" bindingInformation="*:8080:localhost" />
<binding protocol="http" bindingInformation="*:8080:hostname" />
</bindings>
ในที่สุดคุณต้องเรียกใช้ Visual Studio ในฐานะผู้ดูแล
สิ่งที่ช่วยฉันได้คือคลิกขวาที่ไอคอน 'IISExpress' 'แสดงแอปพลิเคชันทั้งหมด' จากนั้นเลือกเว็บไซต์และฉันเห็นว่ามันใช้ aplicationhost.config และการแก้ไขก็สมบูรณ์แบบ
นี่คือสิ่งที่ฉันทำสำหรับ Windows 10 ที่มี Visual Studio 2015 เพื่อเปิดใช้งานการเข้าถึงระยะไกลทั้งด้วย http และ https:
ขั้นตอนแรกคือผูกแอปพลิเคชันของคุณกับที่อยู่ IP ภายในของคุณ เรียกใช้cmd
-> ipconfig
เพื่อรับที่อยู่ เปิดไฟล์/{project folder}/.vs/config/applicationhost.config
และเลื่อนลงจนกว่าคุณจะพบสิ่งนี้:
<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>
bindings
เพิ่มสองผูกใหม่ภายใต้ คุณสามารถใช้ HTTPS เช่นกันหากคุณต้องการ:
<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />
เพิ่มกฎต่อไปนี้ในไฟร์วอลล์ของคุณเปิดcmd
พรอมต์ใหม่ในฐานะผู้ดูแลระบบและเรียกใช้คำสั่งต่อไปนี้:
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
ตอนนี้เริ่มต้น Visual Studio Administrator
เป็น Properties
คลิกขวาแฟ้มโครงการโครงการเว็บและเลือก ไปที่แท็บและคลิกWeb
Create Virtual Directory
หาก Visual Studio ไม่ทำงานในฐานะผู้ดูแลระบบอาจจะล้มเหลว ตอนนี้ทุกอย่างควรทำงาน
คำตอบที่ได้รับการยอมรับสำหรับคำถามนี้เป็นแนวทางสำหรับการให้ IIS Express ทำงานร่วมกับ webmatrix ฉันพบว่าคู่มือนี้มีประโยชน์มากกว่าเมื่อพยายามทำให้ทำงานกับ VS 2010
ฉันเพิ่งทำตามขั้นตอนที่ 3 และ 4 (เรียกใช้ IIS Express ในฐานะผู้ดูแลระบบ) และต้องปิดใช้งานไฟร์วอลล์ชั่วคราวเพื่อให้ทำงานได้
คุณอาจลองตั้งค่าการส่งต่อพอร์ตแทนที่จะพยายามแก้ไขการกำหนดค่า IIS Express ของคุณเพิ่มกฎ HTTP.sys ใหม่หรือเรียกใช้ Visual Studio เป็นผู้ดูแลระบบ
โดยทั่วไปคุณต้องส่งต่อIP:PORT
เว็บไซต์ของคุณทำงานที่พอร์ตฟรีอื่น ๆ ในเครื่องของคุณ แต่ในอะแดปเตอร์เครือข่ายภายนอกไม่ใช่ localhost
สิ่งที่เป็นที่ IIS Express (อย่างน้อยใน Windows 10) ผูกกับ[::1]:port
ความหมายมันฟังบนพอร์ต IPv6 คุณต้องคำนึงถึงสิ่งนี้ด้วย
นี่คือวิธีที่ฉันทำงานนี้ - http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html
หวังว่ามันจะช่วย
วิธีที่ง่ายที่สุดและยอดเยี่ยมที่สุดที่ฉันพบคือใช้ (ใช้เวลา 2 นาทีในการตั้งค่า):
มันจะทำงานกับสิ่งที่ทำงานบน localhost เพียงลงทะเบียนใช้งานได้ง่ายและสิ่งใดก็ตามที่คุณทำงานบน localhost จะได้รับ URL สาธารณะที่คุณสามารถเข้าถึงได้จากทุกที่
สิ่งนี้เป็นสิ่งที่ดีสำหรับการแสดงสิ่งต่าง ๆ กับเพื่อนในทีมระยะไกลของคุณไม่เล่นซอกับการตั้งค่า IIS หรือไฟร์วอลล์ ต้องการหยุดการเข้าถึงเพียงแค่ยกเลิกการใช้งาน
ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ngrok http -host-header=localhost 89230
สมมติว่า 89230 เป็นพอร์ต IIS Express ของคุณ
คุณยังสามารถเรียกใช้หลายพอร์ตได้แม้ในแผนฟรี
ฉันมีปัญหาในการใช้ IIS Express ใน Win 8.1 และคำขอภายนอก
ฉันทำตามขั้นตอนนี้เพื่อดีบักคำขอภายนอก:
มันใช้งานได้!
หากคุณเรียกใช้ Visual Studio จากผู้ดูแลระบบคุณสามารถเพิ่มได้
<binding protocol="http" bindingInformation="*:8080:*" />
หรือ
<binding protocol="https" bindingInformation="*:8443:*" />
เข้าไป
%userprofile%\My Documents\IISExpress\config\applicationhost.config
$(SolutionDir).vs\config\applicationHost.config
และฉันต้องเปิดพอร์ต (8443) ของแอปพลิเคชันในไฟร์วอลล์ Windows
ฉันเปิดใช้งาน IIS ในตัวเครื่องดังนั้นฉันเพิ่งสร้างกฎการเขียนใหม่ไปยังพอร์ตการดีบักของฉัน ... ฉันคิดว่ามันจะดีกว่าและเย็นกว่าวิธีอื่นเพราะมันง่ายกว่าที่จะลบเมื่อทำการพัฒนา ... นี่คือลักษณะการเขียนใหม่ .
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="^dev/(.*)" />
<action type="Rewrite" url="http://localhost:47039/{R:1}" />
</rule>
</rules>
</rewrite>
VS ยังอนุญาตให้คุณพัฒนาโดยใช้ IIS ในเครื่องของคุณโดยตรง (ซึ่งอนุญาตการเชื่อมต่อระยะไกล) แต่ในทางกลับกันคุณจะต้องเรียกใช้ในฐานะผู้ดูแลระบบเสมอ ... ฉันไม่ชอบมัน
ฉันแก้ไขปัญหานี้โดยใช้วิธี reverse proxy
ฉันติดตั้งเซิร์ฟเวอร์ wamp และใช้คุณสมบัติ reverse proxy แบบง่าย ๆ ของ apache เว็บเซิร์ฟเวอร์
ฉันเพิ่มพอร์ตใหม่เพื่อฟังเว็บเซิร์ฟเวอร์ Apache (8081) จากนั้นฉันเพิ่มการกำหนดค่าพร็อกซีเป็น virtualhost สำหรับพอร์ตนั้น
<VirtualHost *:8081>
ProxyPass / http://localhost:46935/
ProxyPassReverse / http://localhost:46935/
</VirtualHost>
ฉันทำตามขั้นตอนทั้งหมดแล้วและไม่มีอะไรช่วยเลย และสิ่งที่ฉันต้องการก็แค่เรียกใช้แอพของฉันผ่าน IIS Express ...
หวังว่ามันจะช่วย
ฉันไม่สามารถตอบสนองการร้องขอ iis ให้กับผู้ใช้คนอื่น ๆ ในเครือข่ายท้องถิ่นของฉันสิ่งที่ฉันต้องทำ (นอกเหนือจากข้างต้น) คือการรีสตาร์ทเราเตอร์ BT Hub ของฉัน
มันยอดเยี่ยมมากและครอบคลุม HTTPS ด้วยชื่อโดเมนที่น่ารัก:
http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx
ส่วนที่น่ากลัวจริง ๆ ฉันไม่พบที่อื่นใน SO ในกรณีที่ลิงก์ด้านบนหายไป:
> 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/
ยูทิลิตี้ด้านบนจะลงทะเบียนใบรับรอง SSL สำหรับคุณ! หากคุณใช้ตัวเลือก -UseSelfSigned มันง่ายมาก
หากคุณต้องการทำสิ่งที่ยากส่วนที่ไม่ชัดเจนคือคุณต้องบอก HTTP.SYS ว่าจะใช้ใบรับรองใดเช่นนี้
netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE
Certhash คือ "Thumbprint" ที่คุณสามารถรับได้จากคุณสมบัติใบรับรองใน MMC
ฉันทำสิ่งต่อไปนี้และสามารถเชื่อมต่อได้:
1) การเปลี่ยนแปลงการกำหนดค่า IIS Express ผูกพันจากโฮสต์ท้องถิ่นเป็น '*'
binding protocol = "http" bindingInformation = "*: 8888: *"
2) กำหนดกฎขาเข้าบนไฟร์วอลล์เพื่ออนุญาตพอร์ตเฉพาะสำหรับประเภทโปรโตคอล: tcp
3) เพิ่มคำสั่งต่อไปนี้เพื่อเพิ่มการกำหนดค่าเครือข่ายสำหรับพอร์ตของคุณ: netsh http เพิ่ม urlacl url = http: // *: 8888 / ผู้ใช้ = ทุกคน
อีกวิธีหนึ่งในการเข้าถึงคำขอภายนอกคือใช้ IIS แทน IIS Express ในสตูดิโอเสมือนจริงฉันสามารถสลับได้อย่างง่ายดาย
[กล่องโต้ตอบคุณสมบัติโครงการ]
สำหรับการพัฒนาโดยใช้ VisualStudio 2017 และโครงการ NetCore API:
1) ใน Cmd-Box: ipconfig / all เพื่อกำหนดที่อยู่ IP
2a) ป้อนที่อยู่ IP ที่ดึงมาได้ในโครงการคุณสมบัติ -> แท็บดีบั๊ก
2b) เลือกพอร์ตและเชื่อมต่อกับที่อยู่ IP จากขั้นตอนที่ 2a
3) เพิ่มกฎการอนุญาตในไฟร์วอลล์เพื่ออนุญาตการรับส่งข้อมูล TCP บนพอร์ตที่เลือก (ไฟร์วอลล์ของฉันถูกทริกเกอร์ด้วยกล่องโต้ตอบ: "บล็อกหรือเพิ่มกฎในไฟร์วอลล์") เพิ่มความตั้งใจในกรณีนั้นทำการหลอกลวง
ข้อเสียของการแก้ปัญหาข้างต้น:
1) หากคุณใช้ที่อยู่ IP แบบไดนามิกคุณต้องทำซ้ำขั้นตอนข้างต้นในกรณีที่มีการกำหนดที่อยู่ IP อื่น
2) เซิร์ฟเวอร์ของคุณมีพอร์ตเปิดซึ่งคุณอาจลืม แต่พอร์ตที่เปิดนี้ยังคงเป็นคำเชิญสำหรับแขกที่ไม่ต้องการ