กำหนดค่า IIS Express สำหรับการเข้าถึงภายนอกโครงการ VS2010


104

ฉันกำลังพัฒนาโครงการใน VS2010 และสามารถดูไซต์ของฉันในเครื่องได้ผ่าน IIS Express ฉันต้องการเปิดใช้งานการเข้าถึงภายนอกผ่านเครือข่าย

งานวิจัยทั้งหมดของฉันได้ส่งฉันไปยังรายการบล็อกนี้: http://blogs.iis.net/vaidyg/archive/2010/07/29/serves-external-traffic-with-webmatrix-beta.aspxซึ่งมีประโยชน์ แต่ทำ ดูเหมือนจะไม่แสดงวิธีกำหนดค่าการผูกสำหรับโปรเจ็กต์ที่เริ่มต้นในวิชวลสตูดิโอ (ฉันไม่พบหน้าจอในภาพหน้าจอและฉันได้แก้ไขข้อมูลการผูกใน applicationhost.config แต่ดูเหมือนจะไม่ปรากฏเมื่อฉันเรียกใช้ไซต์จาก สตูดิโอภาพ)


10
โปรดอ่านโพสต์บล็อกของScott Hanselman hanselman.com/blog/…
balexandre

คำตอบ:


137

1หลังจากแก้ไขไฟล์ applicationhost.config (อยู่ในโฟลเดอร์ IISExpress ในเอกสารของคุณ) การผูกเว็บไซต์ของคุณควรมีลักษณะดังนี้:

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

การผูกประกอบด้วยสามส่วน ประการแรกที่อยู่ IP หรือรายการหรือในกรณีนี้คือสัญลักษณ์แทน ประการที่สองหมายเลขพอร์ตและประการที่สามชื่อโฮสต์หรือรายการหรือสัญลักษณ์แทน (สำหรับการกรองตามHostส่วนหัว) เพื่อจุดประสงค์ในการพัฒนาสัญลักษณ์แทนเหมาะสมที่สุดที่นี่เนื่องจากคุณน่าจะใช้พอร์ตที่ไม่ซ้ำกัน

2เนื่องจากคุณใช้การเชื่อมโยงที่ไม่ใช่ localhost จึงจำเป็นต้องมีการอนุญาตเพิ่มเติม คุณสามารถเรียกใช้ VS ในฐานะผู้ดูแลระบบหรือควรเพิ่ม URL ACLเพื่อให้สิทธิ์ที่จำเป็น ในตัวอย่างด้านล่างมีการให้สิทธิ์แก่ทุกคน แต่คุณสามารถใช้ชื่อผู้ใช้ของคุณเองได้

หมายเหตุ:urlaclต้องตรงกับที่มีผลผูกพัน ดังนั้นurlaclสำหรับhttp://*:8080จะอนุญาตให้มีการผูกมัด*:8080:*แต่ไม่ใช่การผูกมัด*:8080:localhostแม้ว่าส่วนหลังจะเป็นส่วนย่อยของอดีตก็ตาม ซึ่งหมายความว่าหากคุณแสดงรายการส่วนหัวของโฮสต์แทนการใช้สัญลักษณ์แทนคุณapplicationhost.configต้องเพิ่มการจับคู่urlaclสำหรับแต่ละรายการ

ขั้นตอนในการกำหนดค่า HTTP.sys สำหรับการรับส่งข้อมูลภายนอกคล้ายกับการตั้งค่าไซต์เพื่อใช้พอร์ตที่สงวนไว้ บน Windows 7 หรือ Windows Vista จากพรอมต์คำสั่งที่ยกระดับให้เรียกใช้คำสั่งต่อไปนี้:

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

บน Windows XP ให้เรียกใช้คำสั่งต่อไปนี้จากพรอมต์คำสั่งที่ยกระดับ:

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

หมายเหตุ 2หากการรัน VS ในฐานะผู้ดูแลระบบหรือการเพิ่มรายการ ACL ไม่สามารถแก้ปัญหาของคุณได้ให้เรียกใช้ IIS Express จากบรรทัดคำสั่งและตรวจสอบว่ามีข้อความล้มเหลวในการลงทะเบียนที่ผูกไว้หรือไม่ ในการเริ่มต้นจากบรรทัดคำสั่งให้ใช้คำสั่งนี้:

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

3สุดท้ายคุณจะต้องมีรายการไฟร์วอลล์ที่เหมาะสม วิธีนี้ง่ายที่สุดในการใช้คอนโซล "Windows Firewall with Advanced Security"

ภายใต้ "กฎขาเข้า" ให้เลือก "กฎใหม่ ... "

  • ประเภทกฎคือ "กำหนดเอง"
  • โปรแกรมคือบริการ -> ปรับแต่ง ... -> ใช้กับบริการเท่านั้น (แม้ว่า IIS Express ไม่ใช่บริการ แต่มัลติเพล็กเซอร์ HTTP ที่ใช้คือ)
  • โปรโตคอลคือ TCP
  • พอร์ตเฉพาะ: แสดงรายการพอร์ตทั้งหมดสำหรับการเชื่อมโยง IIS Express ทั้งหมดของคุณ คุณสามารถกลับมาที่กฎนี้และเพิ่มพอร์ตได้ทุกเมื่อ (หากสิ่งนี้น่าเบื่อคุณอาจเพิ่มช่วงเช่น40000-65534ที่ครอบคลุมช่วงทั้งหมดที่ใช้โดย Visual Studio แต่โปรดทราบว่าจะมีความปลอดภัยน้อยกว่า)
  • การดำเนินการคือ "อนุญาตการเชื่อมต่อ"
  • โปรไฟล์จะเป็นอย่างใดอย่างหนึ่งต่อไปนี้ หากมีข้อสงสัยให้เลือก "โดเมน + ส่วนตัว"
    • "โดเมน" ถ้าคุณเป็นเดสก์ท็อปขององค์กรและจะทำงานบนโดเมนท้องถิ่นเท่านั้น
    • "โดเมน + ส่วนตัว" หากของคุณเป็นเครื่องพัฒนาส่วนตัวในสภาพแวดล้อมที่ไม่ใช่องค์กรหรือแล็ปท็อปขององค์กรที่ต้องทำงานเมื่อทำงานจากที่บ้าน
    • "โดเมนส่วนตัวและสาธารณะ" หากคุณต้องการทำการสาธิตบนเครือข่ายที่ไม่ใช่ส่วนตัว
  • ชื่อควรเป็นชื่อ "IIS Express Dev Server"

12
@ user578913 ในที่สุดฉันก็พบไฟล์ applicationhost.config ที่ถูกต้องโดยเปิดแถบงาน IIS Express ที่กำลังทำงานอยู่และคลิกที่ลิงค์ไปยังไฟล์ config ฉันตั้งค่าพอร์ตเป็น 1063 ในบรรทัดที่สองเนื่องจากเป็นสิ่งที่บรรทัดแรกถูกตั้งค่าเป็น เรียกใช้บรรทัดคำสั่งของคุณและทุกอย่างดูดี เมื่อฉันไปที่ชื่อเครื่องหรือชื่อเครื่อง: 1063จากเครื่องอื่นในเครือข่ายฉันก็ยังไม่ได้รับอะไรเลย
ซุ่มซ่าม

15
โอเคเนื่องจาก Visual Studio กำหนดพอร์ต (นอกเหนือจาก 8080) Windows Firewall จึงบล็อกมัน หลังจากปิดไฟร์วอลล์ Windows (ฉันสามารถเปิดพอร์ตได้ แต่ฉันอยู่ในเครือข่ายที่ปลอดภัย) และใช้ IP ของเครื่องแทนที่จะใช้ชื่อเครื่องมันก็ใช้งานได้ ขอบคุณ. ฉันจะลงคะแนน แต่ยังไม่มีตัวแทน = (
ขี้อาย

3
ใช่หากจำเป็นต้องเปิด Windows Firewall คุณต้องเพิ่มพอร์ต TCP 8080 (หรือสิ่งที่คุณใช้) อย่างชัดเจน ใน Windows 7 ตอนแรกฉันพยายามกำหนดพอร์ตให้กับ "IIS Express Worker Process" แต่มันไม่ได้ผล ฉันต้องใช้ตัวเลือก "กฎใหม่" และอนุญาตพอร์ต 8080 การเลือกโปรไฟล์ (โดเมนส่วนตัวสาธารณะ) ก็สำคัญเช่นกัน
Gautam Jain

2
หมายเหตุตนเอง: ถ้าคุณได้รับการเข้าถึงถูกปฏิเสธ, เรียกใช้ Visual Studio เป็นผู้ดูแลระบบ
nVentimiglia

3
ณ VS2015 ตำแหน่งไฟล์คือC:\<Path\To\Solution>\.vs\config\applicationhost.config. (ขอบคุณ, @Talon)
ขี้อาย

29

ฉันใช้เวลาหลายชั่วโมงกับปัญหานี้เช่นกันพยายามเรียกดูจาก Android Xoom ไปยังเครื่อง win7 dev ของฉันดังนั้นฉันจึงสามารถทดสอบเว็บแอป asp.net ใหม่ที่ฉันสร้างขึ้น ทั้งหมดที่ฉันทำคือเปลี่ยน applicationhost.config ของ IISExpress จากการใช้ PC HostName เป็นที่อยู่ IP ปัจจุบันของพีซีสำหรับไซต์ใหม่ของฉัน

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

ถึง

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

เมื่อฉันทำสิ่งนี้และเริ่ม IISExpress ใหม่ ... ฉันสามารถเรียกดูเครื่อง dev-Lee ของฉันและดูแอพของฉันจาก Xoom!


10
สิ่งที่ฉันได้รับจากโซลูชันเหล่านี้ทั้งหมดคือข้อผิดพลาด 400 - คำขอไม่ถูกต้อง ข้อเสนอแนะใด ๆ ?
Krumelur

2
@Krumelur ตรวจสอบให้แน่ใจว่าคุณแก้ไขไฟล์ applicationhost.config ที่ถูกต้อง ที่อยู่ในโฟลเดอร์ My Documents
Codler

14

เราสามารถเพิ่มที่อยู่การผูกได้หลายรายการโดยแก้ไข applicationhost.config ของ 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>

ตอนนี้เราสามารถเข้าถึงเว็บไซต์จาก lan โดยใช้ที่อยู่ IP

การเข้าถึงไซต์ท้องถิ่นจาก Lan โดยใช้ IIS Express


6

Visual Studio 2013 SP1 ขึ้นไป (2015) มีการตั้งค่า "ใช้การตั้งค่าเซิร์ฟเวอร์กับผู้ใช้ทั้งหมด (เก็บไว้ในไฟล์โครงการ)" เปิดใช้งานโดยค่าเริ่มต้น เมื่อเปิดใช้งาน Visual Studio จะเปิด IIS Express พร้อมอาร์กิวเมนต์บรรทัดคำสั่งที่ทำให้ใช้ไฟล์คอนฟิกูเรชันอื่น ตำแหน่งของไฟล์ 'applicationhost.config' อยู่ภายใต้ไดเร็กทอรีโปรเจ็กต์ใน '.vs \ config'


1
ใช่นั่นคือปัญหาในกรณีของฉัน - ฉันพยายามแก้ไขไฟล์ที่ไม่ถูกต้อง เมื่อเกิดขึ้นคุณสามารถดูว่าการกำหนดค่าสำหรับแอป IIS Express ของคุณอยู่ที่ใดโดยคลิกที่ไอคอนถาดแสดงรายการแอปทั้งหมดและเลือกไฟล์. เส้นทางไปยังไฟล์ config จะเขียนไว้ด้านล่าง ของฉันอยู่ใน. vs \ config
evilkos

1
ใช่เหมือนกันสำหรับฉัน ขอบคุณมาก.
Vas

2

เราได้สร้างส่วนขยาย VS (2012, 2013, 2015) ฟรีที่เรียกว่า Conveyor ซึ่งช่วยให้สามารถค้นหาได้จากเมนู Tools-> Extensions ... ใน VS หรือบนไซต์แกลเลอรีhttps://visualstudiogallery.msdn.microsoft com / a429dbb7-a982-4541-b401-934375c02c0f? SRC = บ้าน


1
นี่ยอดเยี่ยมและติดตั้งง่ายมาก ขอบคุณสำหรับการทำงาน!
Powellellogram

1

หากคุณกำลังทำงานกับ Visual Studio ให้ทำตามขั้นตอนเหล่านี้เพื่อเข้าถึง IIS-Express ผ่าน IP-Adress:

  1. รับ IP-Adress ของโฮสต์ของคุณ: ipconfigใน Windows Command Line
  2. GoTo $ (SolutionDir) .vs \ config \ applicationHost.config
  3. หา
    <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. เพิ่ม: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    กับที่อยู่ IP ของคุณ
  5. เรียกใช้ Visual Studio ของคุณด้วยสิทธิ์ของผู้ดูแลระบบและทุกอย่างควรใช้งานได้
  6. อาจมองหาปัญหาไฟร์วอลล์บางอย่างหากคุณพยายามเชื่อมต่อจากระยะไกล

เบาะแสคือ Visual Studio มีไฟล์ applicationHost.config เป็นของตัวเอง!


0

ฉันมีปัญหามากในการทำงานจาก Visual Studio 2012 ฉันเปลี่ยนจากข้อผิดพลาด 404 เป็นข้อผิดพลาด 503 ในที่สุดสิ่งที่ใช้ได้ผลสำหรับฉันคือการล้างการกำหนดค่าที่เกี่ยวข้องทั้งหมดในการกำหนดค่า 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

จากนั้นฉันสร้างไดเรกทอรีเสมือนใหม่จากหน้าคุณสมบัติในโครงการเว็บของฉันใน VS แต่ก่อนที่ฉันจะสร้างไดเรกทอรีเสมือนฉันเปลี่ยนชื่อโฮสต์เป็นhttp: // myhost: 80 /จากนั้นกดปุ่มสร้างไดเรกทอรีเสมือน ก่อนหน้านี้ฉันได้รับข้อผิดพลาดที่บอกว่าชื่อโฮสต์ต้องเป็น 'localhost' แต่คราวนี้ไม่ได้ และหลังจากนั้นก็ใช้งานได้

ในระยะสั้นให้ล้างการกำหนดค่าที่มีอยู่ก่อนแล้วเริ่มใหม่อีกครั้ง


-2

หากโดเมนภายนอกของคุณคือ "name.mydyndns.com" คุณจะต้องเขียน:

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

สิ่งนี้ใช้ได้กับ Windows 2003 Server และ IIS 7.5 Express


-3

ภาพหน้าจอ

ในพูลแอปพลิเคชันบน IIS ตั้งค่า "Enable 32-Bit Applications" เป็น "true"


ไม่แน่ใจว่านี่เป็นการตอบคำถามจริง คุณตั้งใจจะโพสต์คำถามนี้กับคำถามอื่นใช่หรือไม่
ckittel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.