การใช้โดเมนที่กำหนดเองด้วย IIS Express


304

ตามเนื้อผ้าฉันใช้โดเมนที่กำหนดเองกับเซิร์ฟเวอร์การพัฒนา localhost บางสิ่งบางอย่างตาม:

dev.example.com
dev.api.example.com

สิ่งนี้ทำให้ฉันมีความยืดหยุ่นมากเมื่อทำงานกับ API ภายนอกเช่น Facebook นี้ได้ทำงานที่ดีในอดีตที่มีการสร้างขึ้นใน Visual Studio พัฒนาเซิร์ฟเวอร์เพราะทั้งหมดที่ฉันต้องการจะทำคือเพิ่ม CNAME เพื่อผู้ระเบียน DNS 127.0.0.1ชี้ไปที่

อย่างไรก็ตามฉันไม่สามารถทำให้มันใช้งานได้กับ IIS Express ทุกสิ่งที่ฉันลองดูเหมือนจะล้มเหลว ฉันได้เพิ่มการกำหนดค่า XML ที่ถูกต้องลงในapplicationHost.configไฟล์สำหรับ IIS Express แต่ดูเหมือนว่าจะไม่รู้จักรายการที่ถูกต้องเหมือนกับการติดตั้ง IIS อย่างแท้จริง

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

เมื่อใดก็ตามที่ฉันป้อนบรรทัดนี้และพยายามที่จะขอhttp://dev.example.com:1288ฉันได้รับข้อความต่อไปนี้:

คำขอไม่ถูกต้อง - ชื่อโฮสต์ไม่ถูกต้อง

มีใครรู้บ้างว่าฉันขาดอะไรที่ชัดเจนไปรึเปล่า? หรือทีม IIS Express ขาดความสามารถในการมองเห็นการใช้งานประเภทนี้จริง ๆ


ตรวจสอบให้แน่ใจว่าคุณมีแอ็ตทริบิวต์ applicationPool ของโหนดแอปพลิเคชันที่ตั้งค่าเป็น "Clr2IntegratedAppPool" หรือ "Clr4IntegratedAppPool" ฉันพบข้อผิดพลาด Bad Hostname ที่คุณเห็นเมื่อใช้ "Clr2ClassicAppPool" หรือ "Clr4ClassicAppPool"
Neil Monroe

สับสน - ระเบียน CNAME ไม่ยอมรับที่อยู่ ip แต่เป็นชื่อโฮสต์อื่นแทน คุณหมายถึง A record หรือเปล่า
Scott Coates

1
ฉันมีปัญหามากมายเกี่ยวกับสิ่งนี้และพบว่าง่ายกว่าการใช้ IIS แทน IIS Express
user0b101010

ฉันเพิ่งพบเจอสิ่งนี้เช่นกัน ฉันหวังว่ามันจะดูที่หมายเลขพอร์ตและไม่สนใจโดเมน ไม่มีโชคเช่นนี้ หวังว่าฉันจะช่วยให้ "ยอมรับ" ในพอร์ต ....
เบรดี้มอริตซ์

โหวตตอนนี้! ฉันได้เพิ่มข้อเสนอแนะของ UserVoice: visualstudio.uservoice.com/forums/121579-visual-studio/ …
ลุค Puplett

คำตอบ:


367

นี่คือสิ่งที่ใช้งานได้สำหรับฉัน (อัปเดตสำหรับ VS 2013 ดูประวัติการแก้ไขสำหรับปี 2010 สำหรับVS 2015ดูสิ่งนี้: https://stackoverflow.com/a/32744234/218971 ):

  1. คลิกขวาที่ Web Application Project ของคุณProperties▶▶ Webจากนั้นกำหนดค่าServersส่วนดังต่อไปนี้:
    • เลือกIIS Express ▼จากเมนูแบบเลื่อนลง
    • URL โครงการ: http://localhost
    • แทนที่ URL รูทแอปพลิเคชัน: http://dev.example.com
    • คลิกCreate Virtual Directory(หากคุณได้รับข้อผิดพลาดที่นี่คุณอาจต้องปิดการใช้งาน IIS 5/6/7/8 เปลี่ยน IIS เป็นDefault Siteอะไรก็ได้ยกเว้นพอร์ต:80ตรวจสอบให้แน่ใจว่าSkype ไม่ได้ใช้พอร์ต 80เป็นต้น)
  2. เลือก: ตั้งค่าStart URLการhttp://dev.example.com
  3. เปิด%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config(Windows XP, Vista และ 7) และแก้ไขข้อกำหนดของไซต์ใน<sites>บล็อกการกำหนดค่าให้อยู่ในบรรทัดต่อไปนี้:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
    
  4. หากใช้ MVC: ตรวจสอบให้แน่ใจว่าapplicationPoolได้ตั้งค่าเป็นหนึ่งในตัวเลือก "รวม" (เช่น "Clr2IntegratedAppPool")

  5. เปิดของคุณhostsไฟล์127.0.0.1 dev.example.comและเพิ่มบรรทัด
  6. ► Start ใบสมัครของคุณ!

คำแนะนำที่ดีจากความคิดเห็น:

  • คุณอาจต้องเรียกใช้ Visual Studio ในฐานะผู้ดูแลระบบ
  • ถ้าคุณต้องการที่จะทำให้ dev อื่น ๆ ดู IIS ของคุณทำงาน netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • bindingInformation="*:80:"หากคุณต้องการเว็บไซต์เพื่อแก้ปัญหาสำหรับทุกครอบครัวตั้ง ใช้พอร์ตใดก็ได้ตามต้องการ 80 สะดวก

12
นี่คือสิ่งที่ฉันทำคือกำลังจะเขียนมันขึ้นมา แต่คุณตีฉันเพื่อชกต่อย :-) ถ้าคุณต้องการให้ dev คนอื่นเห็น IIS ของคุณคุณอาจต้องการทำอะไรบางอย่าง "netsh http เพิ่ม urlacl url = dev.example.com:80ผู้ใช้ = ทุกคน "
EBarr

6
นอกจากนี้หากคุณต้องการให้เว็บไซต์แก้ปัญหาสำหรับโฮสต์ทั้งหมดคุณสามารถใช้: bindingInformation = "*: 80:" ฉันใช้มันเพื่อให้ localtunnel.com ทำงานได้
แลนซ์ฟิชเชอร์

17
ฉันได้รับข้อผิดพลาดถูกปฏิเสธการเข้าถึง ใช้ VS 2012 ในฐานะผู้ดูแลระบบซ่อม
xanadont

3
IIS Express รุ่นนี้เป็นรุ่นใด ฉันใช้ VS2012 (ซึ่งฉันเชื่อว่าเป็น IIS Express 8.0) และเมื่อฉันคลิกที่ "ใช้ Local IIS Server" radiobutton ภายใต้พื้นที่ "เซิร์ฟเวอร์" ของหน้าคุณสมบัติเว็บคลิกที่ช่องทำเครื่องหมายใช้ IIS Express จากนั้นลอง เพื่อใส่ใน " mydev.example.com " จากนั้นกดปุ่ม "สร้างไดเรกทอรีเสมือน" ฉันได้รับข้อผิดพลาดนี้ "ไม่สามารถสร้างไดเรกทอรีเสมือนไม่สามารถสร้างเว็บไซต์ mydev.example.com" คุณต้องระบุ "localhost" สำหรับชื่อเซิร์ฟเวอร์
Michael McCarthy

12
สิ่งนี้มีความซับซ้อน เราต้องเปลี่ยนการกินข้าวในที่ต่างๆ มันเป็นเรื่องง่ายที่จะทำให้เป็นระเบียบจริง ไม่มีวิธีที่ง่ายกว่านี้จริงเหรอ?
Anderson

151

สำหรับVisual Studio 2015 จะใช้ขั้นตอนในคำตอบข้างต้น แต่applicationhost.configไฟล์อยู่ในตำแหน่งใหม่ ในโฟลเดอร์ "solution" ของคุณไปตามเส้นทางนี่จะทำให้สับสนหากคุณอัพเกรดและจะมีสองเวอร์ชั่นapplicationhost.configในเครื่องของคุณ

\.vs\config

ภายในโฟลเดอร์นั้นคุณจะเห็นไฟล์applicationhost.configของคุณ

อีกวิธีหนึ่งคุณสามารถค้นหาโฟลเดอร์โซลูชันของคุณเพื่อหาไฟล์. config และค้นหาไฟล์นั้นได้

ฉันใช้การกำหนดค่าต่อไปนี้เป็นการส่วนตัว:

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยสิ่งต่อไปนี้ในไฟล์โฮสต์ของฉัน:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

และต่อไปนี้ในไฟล์ applicationhost.config ของฉัน:

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

อย่าลืมเรียกใช้อินสแตนซ์ของ visual Studio 2015 ในฐานะผู้ดูแลระบบของคุณ! หากคุณไม่ต้องการทำสิ่งนี้ทุกครั้งที่ฉันแนะนำสิ่งนี้:

วิธีการเรียกใช้ Visual Studio ในฐานะผู้ดูแลระบบโดยค่าเริ่มต้น

ฉันหวังว่านี่จะช่วยใครซักคนฉันมีปัญหาเมื่อพยายามอัพเกรดเป็น visual studio 2015 และตระหนักว่าไม่มีการกำหนดค่าของฉันอยู่


9
ส่วนที่สำคัญคือการเพิ่มการ*:49707:ผูกที่สองแทนการแทนที่ค่าเริ่มต้น*:49707:localhostตามที่แนะนำในคำตอบอื่น ๆ อีกมากมาย และคุณต้องเรียกใช้ VS ในฐานะผู้ดูแลระบบแน่นอน (sic!) ขอบคุณ.
fracz

3
คุณสามารถใช้ URL เช่นhttp://jam.127.0.0.1.xip.io/ถ้าคุณไม่ต้องการแก้ไขไฟล์โฮสต์ของคุณ นอกจากนี้ผู้ทำงานร่วมกันไม่จำเป็นต้องแก้ไข ดูxip.io
Zack Martin

1
ฉันคิดว่ามันคุ้มค่าที่จะทราบว่าโฟลเดอร์ ".vs" ถูกซ่อนไว้และควรปรากฏให้เห็นในตอนแรก
ผิดหวัง

3
ฉันยืนยันว่าสามารถใช้งานได้ใน Visual Studio 2017 เช่นกัน น่าสนใจฉันไม่ต้องการองค์ประกอบ <binding> (แค่องค์ประกอบแรกที่ไม่มี "localhost") อย่างไรก็ตาม Visual Studio นั้นไม่จำเป็นต้องเรียกใช้ในฐานะผู้ดูแลระบบซึ่งเป็นเรื่องที่น่ารำคาญ
Loren Paulsen

1
ฉันแค่หวังว่าจะมีวิธีการสำหรับพวกเราที่ไม่ได้รับอนุญาตให้ทำงานอะไรเพื่อทำสิ่งนี้ นายจ้าง / ลูกค้าที่ปิดบังสิทธิ์ผู้ดูแลระบบโดยไม่คิดว่าจะเปิดใช้งานสิ่งนี้ได้อย่างปลอดภัยอย่างไร
Steve Pettifer

44

เมื่อใช้ Visual Studio 2012 กับ IIS Express การเปลี่ยนการโยงที่มีอยู่จะไม่ทำงานอย่างถาวร (อาจใช้งานได้จนกว่าคุณจะปิด VS แต่หลังจากนั้นสิ่งต่าง ๆ ก็ยุ่งเหยิงไปหมด)

กุญแจสำคัญคือการรักษาผูกพัน localhost ที่มีอยู่และเพิ่มการผูกพันใหม่หลังจากนั้น

หากคุณไม่ได้ทำงานในฐานะผู้ดูแลระบบคุณจะต้องเรียกใช้netsh add urlacl(เพื่อให้สิทธิ์แก่คุณในการใช้งานไซต์ที่ไม่ใช่ localhost ในฐานะผู้ใช้มาตรฐาน)

หากคุณต้องการอนุญาตชื่อโฮสต์ใด ๆ กระบวนการทั้งหมดจะเป็นดังนี้:

  1. สร้างเว็บแอปพลิเคชันของคุณและค้นหาพอร์ตที่ใช้ (ดูคุณสมบัติโครงการ, แท็บเว็บ, URL โครงการ)
  2. จากผู้ดูแลระบบพรอมต์เรียกใช้คำสั่งดังต่อไปนี้ (แทนที่portnumberกับหมายเลขพอร์ตที่คุณคิดออกใน # 1):

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    

คุณยังสามารถใช้ชื่อผู้ใช้ของคุณ (DOMAIN \ USER) แทนทุกคนเพื่อความปลอดภัยที่ดีขึ้น

  1. เปิด applicationhost.config (มักอยู่ภายใต้ My Documents \ IIS Express \ config) และค้นหาองค์ประกอบด้วยหมายเลขพอร์ตของคุณ
  2. เพิ่มการเชื่อมโยงอีกหนึ่งชื่อโฮสต์ที่คุณต้องการ (ในกรณีนี้, *) ตัวอย่างเช่น:

    <site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>
    

โปรดทราบว่าหากต้องการเปิดชื่อโฮสต์ทั้งหมด (*) คุณจะต้องใช้คำสั่ง netsh สองคำสั่ง (หนึ่งคำสั่งสำหรับ * และหนึ่งคำสำหรับ localhost) หากคุณต้องการเปิดชื่อโฮสต์เฉพาะคุณไม่ต้องการคำสั่ง netsh ที่สอง (localhost) อย่างเคร่งครัด เฉพาะที่มีชื่อโฮสต์เฉพาะของคุณก็เพียงพอแล้ว


ทำเช่นเดียวกัน (วิธีที่ 1) เมื่อเรียกดูmycustomhost: myportnrฉันได้รับ "Service Unavailable" VS2012 ฉันไม่สามารถลองครั้งที่สองได้เนื่องจากไม่มี IIS Express ภายใต้ "My Documents" และ applicationhost.config ที่ฉันพบใน c: \ Program files \ IIS Express ไม่มีการกำหนดค่าสำหรับเว็บแอปพลิเคชันของฉัน ...
firepol

2
ด้วย VS2013 ฉันพบว่าการกำหนดค่านี้ใช้ได้เฉพาะเมื่อฉันเรียกใช้ในฐานะผู้ดูแลระบบเท่านั้น! (ทำงานในรูปแบบที่ไม่ใช่ผู้ดูแลระบบ IIS Express ดูเหมือนจะไม่สนใจการโยงที่ 2 - ถ้าฉันเปิด UI จากไอคอนการแจ้งเตือน IIS จะแสดงไซต์ของฉันกำลังทำงาน แต่แสดงเฉพาะการเชื่อมต่อแรกเท่านั้นและฉันสามารถใช้localhost ได้ ... ถ้า ฉันทำงานเป็นผู้ดูแลระบบจะแสดงการเชื่อมโยงทั้งสองอย่างใน UI และทั้งสองอย่าง) ฉันได้เพิ่ม URL ด้วย netsh แต่สิ่งนี้ดูเหมือนจะสร้างความแตกต่าง - IIS Express ดูเหมือนจะไม่พยายามผูกอะไรอื่นนอกจาก localhost ถ้ามันไม่ได้ยกระดับ
เอียนกริฟฟิ ธ

การเพิ่มบันทึกด้วยการ*แก้ไข "บริการไม่พร้อมใช้งาน" มันสำหรับฉัน
เจอโร่

สิ่งที่เกี่ยวกับสถานการณ์ที่คุณต้องใช้ HTTPS บนพอร์ต 443
Kixoka

@Kixoka ฉันพยายามเรียกใช้ HTTPS ฉันจัดการเพื่อให้มันทำงานได้ แต่เบราว์เซอร์บ่นว่าใบรับรองไม่ตรงกับโดเมน ฉันเคยผ่านมาแล้ว แต่ทรัพยากรทั้งหมดไม่สามารถโหลดได้ดังนั้นจึงไม่มีรูปภาพสคริปต์หรือ CSS
เด่นโดยการออกแบบ

24

ชื่อโฮสต์ที่ไม่ถูกต้องระบุว่าเว็บไซต์จริงที่คุณกำหนดค่าในไฟล์การกำหนดค่า IIS Express นั้นไม่น่าจะทำงานอยู่ IIS Express ไม่มีรูปแบบกระบวนการเช่น IIS


เพื่อให้เว็บไซต์ของคุณทำงานจะต้องเริ่มต้นอย่างชัดเจน (โดยการเปิดและเข้าถึงจาก webmatrix หรือจากบรรทัดคำสั่งเรียก iisexpress.exe (จากไดเรกทอรีการติดตั้ง) ด้วยพารามิเตอร์ / site


โดยทั่วไปขั้นตอนในการอนุญาตให้ใช้ชื่อ DNS แบบเต็มสำหรับการเข้าถึงในพื้นที่นั้นคือลองใช้ตัวอย่างชื่อ DNS ของคุณ dev.example.com

  1. แก้ไข% windows% \ system32 \ drivers \ etc \ hosts ไฟล์เพื่อแมป dev.example.com เป็น 127.0.0.1 (จำเป็นต้องมีสิทธิ์ของผู้ดูแลระบบ) หากคุณควบคุมเซิร์ฟเวอร์ DNS (เช่นเดียวกับในกรณีของ Nick) รายการ DNS ก็เพียงพอเนื่องจากไม่จำเป็นต้องใช้ขั้นตอนนี้
  2. หากคุณเข้าถึงอินเทอร์เน็ตผ่านพร็อกซีตรวจสอบให้แน่ใจว่า dev.example.com จะไม่ถูก forwared ไปยังพร็อกซี (คุณต้องใส่ในรายการข้อยกเว้นในเบราว์เซอร์ของคุณ (สำหรับ IE มันจะเป็นเครื่องมือ / ตัวเลือกอินเทอร์เน็ต / การตั้งค่า / การเชื่อมต่อ Lan) จากนั้นไปที่ Proxy Server / Advanced แล้วใส่ dev.example.com ในรายการ exption
  3. กำหนดค่าการโยง IIS Express สำหรับเว็บไซต์ของคุณ (เช่น: ไซต์ 1) เพื่อรวม dev.example.com สิทธิ์ของผู้ดูแลระบบจะต้องใช้การรวม อีกวิธีหนึ่งคือการสำรอง URL แบบครั้งเดียวด้วย http.sys โดยใช้

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. เริ่มiisexpress /site:Site1หรือเปิด Site1 ใน WebMatrix


2
สวัสดี Jaro ขอขอบคุณสำหรับความช่วยเหลือ แต่มีการตั้งค่า 127.0.0.1 ใน DNS ของฉันไม่ใช่ไฟล์โฮสต์เพื่อให้นักพัฒนาทั้งหมดสามารถเข้าถึงได้เหมือนกัน ที่สองฉันไม่สามารถเริ่มการดีบักใน VS ยกเว้นการตั้งค่าการผูกเป็น "*: 1234: localhost" ซึ่งเป็นการตั้งค่าที่ไร้ประโยชน์โดยสิ้นเชิงเพราะมันถูกผูกไว้กับที่อยู่ IP ทั้งหมดบนเครื่องของฉัน แต่ยอมรับเฉพาะโฮสต์ของ "localhost" " ทำไมพวกเขาถึงไม่ทำ "127.0.0.1:1234:" และหลีกเลี่ยงอึทั้งหมดนี้ ไม่จำเป็นต้องมีส่วนหัวของโฮสต์ตราบใดที่การแก้ไข IP และพอร์ต และการทำงานในฐานะผู้ดูแลระบบเป็นเพียงความเจ็บปวดครั้งใหญ่ในทีมใหญ่ ภัยพิบัติ IIS Express คืออะไร
Nick Berardi

1
นอกจากนี้การอ้างอิงBad Request - Invalid Hostnameหมายความว่าชื่อโฮสต์ที่ฉันพยายามใช้ไม่สามารถแก้ไขได้เนื่องจากทีม IIS Express ในภูมิปัญญาที่ไม่มีที่สิ้นสุดของพวกเขาตัดสินใจที่จะเรียกเฉพาะ "localhost" เป็นส่วนหัวของโฮสต์เท่านั้นที่จะทำงาน และ VS จะไม่ยอมให้คุณใช้วิธีอื่นนอกจาก "*: 1234: localhost"
Nick Berardi

2
ฉันได้ยินคุณเกี่ยวกับปัญหา 127.0.0.1 "การ localhost" ในการผูกเป็นมั่นเหมาะเจ็บปวดเพราะมันไม่ได้รวมถึงการเข้าชมสำหรับ127.0.0.1 การออกแบบถูก จำกัด โดยสัญญาวันนี้ของ http.sys (ตัวจัดการโพรโทคอล http) ที่รู้จักเฉพาะ "localhost" สำหรับการใช้ที่ไม่ใช่ผู้ดูแลระบบ ข้อกำหนดของผู้ดูแลระบบเท่านั้นที่สามารถลดลงได้ด้วยการสำรอง URL แบบครั้งเดียวด้วย http.sys (จะอัปเดตข้อมูลด้านบน) โปรดแจ้งให้เราทราบว่าคุณใช้ Visual Studio อย่างแน่นอน (เป็น VS2010 พร้อม SP1 Beta ใช่หรือไม่) เรามาลองแก้ไขปัญหานี้กันดีกว่า (หวังว่า) จะแก้ปัญหานี้
Jaro Dunajsky

หมายเหตุ - หากคุณเห็นข้อผิดพลาด netsh.exe 87 พารามิเตอร์ไม่ถูกต้อง - อาจเป็นเพราะคุณไม่ได้ใช้พา ธ URI (/) หลังชื่อโฮสต์ของคุณ
ทิมโลเวลล์ - สมิ ธ

19

เมื่อวันที่ WebMatrix IIS ด่วนติดตั้งของฉันเปลี่ยนจาก"*:80:localhost"การ"*:80:custom.hostname"ไม่ได้ทำงาน ( "Bad ชื่อโฮสต์" แม้จะมีที่เหมาะสม ฯลฯ \ แมปเจ้าภาพ) แต่"*:80:" ไม่ทำงาน - และไม่มีขั้นตอนเพิ่มเติมที่จำเป็นโดยคำตอบอื่น ๆ ที่นี่ โปรดทราบว่า"*:80:*"จะไม่ทำเช่นนั้น ปล่อยเครื่องหมายดอกจันที่สอง


3
uuuum "*:80:*"ทำงานได้ดีสำหรับฉัน แต่จากนั้นฉันรีสตาร์ทคอมพิวเตอร์และมันก็ไม่ทำงานจนกว่าฉันจะเปลี่ยนเป็น"*:80:"และทุกอย่างก็ดี! ขอบคุณ
CWSpear

2
ในที่สุด !! ยังทำตามขั้นตอนทั้งหมดที่อื่น ๆ และลบ * ตอนท้ายทำให้ใช้งานได้ขอบคุณ!
Charles Philip

เพียงที่นี่เพื่อบอกว่ามันใช้งานได้สำหรับฉัน ฉันลองคำตอบที่ยอมรับแล้วเปลี่ยนการเปลี่ยนแปลงทั้งหมดกลับเป็นสิ่งที่คุณพูดและใช้งานได้ดี ฉันใช้ VS2013 Update4
JasonWilczak

ดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์แบบ เมื่อใช้ VS2017 ฉันไม่แน่ใจว่าจะวางอะไรใน Project Url เพื่อให้มันเขียนมันในไฟล์ applicationhost.config เป็นไปได้หรือไม่ที่จะตั้งค่าผ่าน VS IDE
Jim

8

ฉันพยายามรวมที่อยู่ IP สาธารณะในเวิร์กโฟลว์ของฉันและคำตอบเหล่านี้ไม่ได้ช่วย (ฉันชอบใช้ IDE เป็น IDE) แต่สิ่งที่กล่าวมาข้างต้นนำฉันไปสู่การแก้ไขปัญหา (หลังจากนั้นประมาณ 2 ชั่วโมงในการตีหัวของฉันกับกำแพงเพื่อให้สิ่งนี้รวมเข้ากับ Visual Studio 2012 / Windows 8) นี่คือสิ่งที่จบลงด้วยการทำงานให้ฉัน

applicationhost.configสร้างโดย VisualStudio ภายใต้C:\Users\usr\Documents\IISExpress\config

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • ตั้งค่า IIS Express ให้ทำงานAdministratorเพื่อให้สามารถผูกกับที่อยู่ภายนอก (ไม่ใช่โฮสต์ในเครื่อง)
  • เรียกใช้ Visual Stuio Administratorเพื่อให้สามารถเริ่มกระบวนการในฐานะผู้ดูแลระบบเพื่อให้เกิดการเชื่อมโยง

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

เห็นได้ชัดว่ามันเป็นคุณสมบัติความปลอดภัยที่ฉันชอบที่จะเห็นปิดการใช้งาน


8

เช่นเดียวกับJessa Flint ด้านบนฉันไม่ต้องการแก้ไข. vs \ config \ applicationhost.configด้วยตนเองเพราะฉันต้องการให้การเปลี่ยนแปลงยังคงอยู่ในการควบคุมแหล่งที่มา ฉันยังไม่ต้องการมีแบตช์ไฟล์แยกต่างหาก ฉันใช้VS 20152015

คุณสมบัติของโครงการ→สร้างเหตุการณ์→บรรทัดคำสั่งเหตุการณ์ก่อนสร้าง: สกรีนช็อตของคุณสมบัติโครงการ


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

เพียงตรวจสอบให้แน่ใจว่าคุณเปลี่ยนหมายเลขพอร์ตเป็นพอร์ตที่คุณต้องการ


นอกจากนี้เล็กน้อยที่นี่ ตรวจสอบให้แน่ใจว่าได้สร้างกฎเพื่อเปิดพอร์ตนั้นใน Windows Firewall ของคุณ ถ้าอย่างนั้นมันก็ใช้งานได้อย่างมีเสน่ห์!
Peter M

ฉันชอบคำตอบของคุณเนื่องจากการแก้ไข. vs \ config \ applicationhost.config ไม่สามารถทำได้เมื่อนักพัฒนาหลายคนเรียกใช้ IIS Express บนเครื่องของตัวเอง ขอบคุณ!
โคลิน

6

คำตอบที่ได้รับการโหวตนั้นถูกต้อง .. และข้อมูลนี้ช่วยฉันได้เล็กน้อย ฉันรู้ว่าหัวข้อนี้ได้รับการกล่าวถึงก่อนหน้านี้ แต่ฉันต้องการเพิ่มข้อมูลเพิ่มเติมบางอย่าง มีคนพูดว่าคุณต้อง "แก้ไขไฟล์" ไฟล์ application.config ด้วยตนเองในไดเรกทอรีผู้ใช้ IISExpress / Config นี่เป็นปัญหาใหญ่สำหรับฉันเพราะฉันต้องการกระจายการกำหนดค่าผ่านการควบคุมแหล่งที่มาให้กับนักพัฒนาต่างๆ

สิ่งที่ฉันพบคือคุณสามารถทำการอัปเดตไฟล์นี้โดยอัตโนมัติโดยใช้โปรแกรม "C: \ Program Files \ IIS Express \ appcmd.exe" ใช้เวลาสักครู่เพื่อค้นหาพารามิเตอร์การควบคุม แต่ฉันจะแบ่งปันสิ่งที่ฉันค้นพบที่นี่ โดยพื้นฐานแล้วคุณสามารถสร้างไฟล์. bat ที่รันทั้งคำสั่ง NETSH และ APPCMD.EXE (และอาจสลับไฟล์โฮสต์หากคุณต้องการ) เพื่อให้การกำหนดค่าส่วนหัวของโฮสต์ทำได้ง่ายด้วย IIS Express

ไฟล์ค้างคาวติดตั้งของคุณจะมีลักษณะเช่นนี้:

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

ฉันยังจะสร้างไฟล์ค้างคาว "ถอนการติดตั้ง" ที่จะล้างการเชื่อมต่อเหล่านี้ .. (เพราะบ่อยครั้งที่ฉันเพิ่งแกล้งทำ DNS เพื่อให้ฉันสามารถทำงานกับโค้ดที่ไวต่อชื่อโฮสต์)

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

ฉันหวังว่าข้อมูลนี้จะเป็นประโยชน์กับใครบางคน .. ฉันใช้เวลาเล็กน้อยในการค้นหา


4

ทำตามคำแนะนำของ Jaro ฉันสามารถทำงานภายใต้ Windows XP และ IIS Express (ติดตั้งผ่าน Web Matrix) ด้วยการปรับเปลี่ยนเล็กน้อยและไม่ จำกัด เฉพาะ localhost เท่านั้น เป็นเพียงเรื่องของการตั้งค่าการเชื่อมโยงอย่างถูกต้อง

  1. ใช้ WebMatrix เพื่อสร้างไซต์ใหม่จากโฟลเดอร์ในรูทแอปพลิเคชันเว็บของคุณ
  2. ปิด WebMatrix
  3. เปิด%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP. Vista และเส้นทาง 7 จะคล้ายกัน)และแก้ไขข้อกำหนดของไซต์ใน<sites>บล็อกการกำหนดค่าให้อยู่ในบรรทัดต่อไปนี้:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation="*:80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>

หากใช้ MVC ให้ตั้งค่า applicationPool เป็นหนึ่งในตัวเลือก "รวม"


3

ทางออกของเดวิดนั้นดี แต่ผมพบว่า<script>alert(document.domain);</script>ในหน้ายังคงแจ้งเตือน "localhost" เพราะโครงการ Url ยังคงเป็น localhost http://dev.example.comแม้ว่าจะได้รับการแทนที่ด้วย อีกปัญหาที่ฉันพบคือมันแจ้งเตือนฉันว่าพอร์ต 80 ใช้งานไปแล้วแม้ว่าฉันจะปิดใช้งาน Skype โดยใช้หมายเลขพอร์ต 80 ตามที่ David Murdoch แนะนำ ดังนั้นฉันจึงหาวิธีแก้ปัญหาอื่นที่ง่ายกว่ามาก:

  1. เรียกใช้ Notepad ในฐานะผู้ดูแลระบบและเปิด C: \ Windows \ System32 \ drivers \ etc \ hosts เพิ่ม 127.0.0.1 mydomain และบันทึกไฟล์
  2. เปิดโครงการเว็บด้วย Visual Studio 2013 (หมายเหตุ: ต้องเรียกใช้ในฐานะผู้ดูแลระบบ) คลิกขวาที่โครงการ -> Properties -> Web (ให้สมมติ Project Url ภายใต้ตัวเลือก "IIS Express" http://localhost:33333/) จากนั้นเปลี่ยนจากhttp://localhost:33333/ถึงhttp://mydomain:333333/ หมายเหตุ: หลังจากการเปลี่ยนแปลงนี้คุณไม่ควรคลิกปุ่ม "สร้างไดเรกทอรีเสมือน" ทางด้านขวาของกล่อง URL โครงการหรือคลิกที่ปุ่มบันทึกของ Visual Studio เนื่องจากจะไม่ประสบความสำเร็จ คุณสามารถบันทึกการตั้งค่าหลังจากขั้นตอนถัดไป 3
  3. เปิด% USERPROFILE% \ My Documents \ IIS Express \ config \ applicationhost.config ค้นหา "33333: localhost" จากนั้นอัปเดตเป็น "33333: mydomain" และบันทึกไฟล์
  4. บันทึกการตั้งค่าตามที่กล่าวไว้ในขั้นตอนที่ 2
  5. คลิกขวาที่หน้าเว็บในสตูดิโอภาพและคลิก "ดูในเบราว์เซอร์" ตอนนี้หน้าจะเปิดใต้http://mydomain:333333/และ<script>alert(document.domain);</script>ในหน้าจะแจ้งเตือน "mydomain"

หมายเหตุ:หมายเลขพอร์ตที่แสดงด้านบนจะถือว่าเป็น 33333 คุณต้องเปลี่ยนเป็นหมายเลขพอร์ตที่กำหนดโดยสตูดิโอภาพของคุณ

โพสต์แก้ไขแล้ว: วันนี้ฉันลองด้วยชื่อโดเมนอื่นและได้รับข้อผิดพลาดต่อไปนี้: ไม่สามารถเปิดเว็บเซิร์ฟเวอร์ IIS Express ไม่สามารถลงทะเบียน URL ... การเข้าถึงถูกปฏิเสธ (0x80070005) ฉันออกจาก IIS Express โดยคลิกขวาที่ไอคอน IIS Express ที่มุมขวาในทาสก์บาร์ของ Windows จากนั้นเริ่มสตูดิโอภาพของฉันใหม่ในฐานะผู้ดูแลระบบและปัญหาหายไป


1
ตอนนี้นี่คือคำตอบที่ควรได้รับการพิจารณาว่าเป็นทางออกที่เหมาะสม! ตรวจสอบให้แน่ใจว่าคุณแก้ไข applicationhost.config อยู่ใน. vs / config หากคุณใช้ visual studio 2015
Fabio Salvalai

1

ฉันพยายามทั้งหมดข้างต้นไม่มีอะไรทำงาน สิ่งที่แก้ไขปัญหาได้คือการเพิ่มการผูก IPv6 ในไฟล์โฮสต์ ในขั้นตอนที่ 5 ของ @David Murdochs ให้เพิ่มสองบรรทัดแทนหนึ่งบรรทัดเช่น:

127.0.0.1 dev.example.com
::1 dev.example.com

ฉันคิดออกโดยตรวจสอบ$ ping localhostจากบรรทัดคำสั่งซึ่งใช้ในการส่งคืน:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

แต่ตอนนี้มันกลับมา:

Reply from ::1: time<1ms

ฉันไม่รู้ว่าทำไม แต่ด้วยเหตุผลบางอย่าง IIS Express เริ่มใช้ IPv6 แทน IPv4



0

ออกจากที่นี่ในกรณีที่ทุกคนต้องการ ...

ฉันต้องมีโดเมนที่กำหนดเองสำหรับการติดตั้ง Wordpress Multisite ใน IIS Express แต่ไม่มีอะไรทำงานจนกว่าฉันจะรัน Webmatrix / Visual Studio ในฐานะผู้ดูแลระบบ จากนั้นฉันก็สามารถผูกโดเมนย่อยกับแอปพลิเคชันเดียวกันได้

<bindings> 
    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>

จากนั้นไปที่http: //wh ก็ตาม.localhost: 12345 /จะทำงาน

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