iT邦幫忙

0

Angular 如何在IIS上 跨網域存取資料??

各位大大們,你們好!!

小弟在實作Angular專案所遇到的問題,懇請大大們解惑,能提供具體的解決方案嗎??

我在本機上執行 ng serve --proxy-config proxy.conf.json 這個指令是可以運行並存取資料的,只是為何在IIS上就不行的呢??/images/emoticon/emoticon04.gif

下列圖1圖2皆為在本機上運行的結果,確實有撈到資料並呈現,真讓我百思不解。/images/emoticon/emoticon06.gif

圖1:
https://ithelp.ithome.com.tw/upload/images/20190220/20114624BFStrzgDLD.png
圖2:
https://ithelp.ithome.com.tw/upload/images/20190220/20114624F9xOmmDgTq.png

下圖是使用HttpClinet模組來存取資料。
桃園公車路線資訊 http://apidata.tycg.gov.tw/OPD-io/bus4/GetRoute.json

https://ithelp.ithome.com.tw/upload/images/20190220/20114624PeOfmDHZgB.png

下圖是proxy.conf.json設定檔
https://ithelp.ithome.com.tw/upload/images/20190220/20114624LlXQ9c2Q82.png

下圖是在IIS上架後的開啟Chrome的除錯訊息
https://ithelp.ithome.com.tw/upload/images/20190220/201146244I7XSH4KQj.png

/images/emoticon/emoticon20.gif

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2019-02-20 16:20:03 檢舉
瀏覽器直接執行 http://localhost:8070/OPD-io...那串網址一樣是404?
是的話你要去看你後端。
Homura iT邦高手 1 級 ‧ 2019-02-20 16:36:46 檢舉
你的API和Angular同個Port?
那你要看看API的位置有沒有被Angular的router給咬住
qwer2561 iT邦研究生 5 級 ‧ 2019-02-20 16:46:56 檢舉
不好意思 我目前只有做前端的部分,後端是連 桃園開放資料 https://data.tycg.gov.tw
Homura iT邦高手 1 級 ‧ 2019-02-20 16:58:02 檢舉
可是你GET 404的位置是localhost:8070 ?
qwer2561 iT邦研究生 5 級 ‧ 2019-02-20 17:01:40 檢舉
port:4200是在Angular運行時跑的連接埠
而port:8070是在IIS上運行的連接埠
Homura iT邦高手 1 級 ‧ 2019-02-20 17:03:00 檢舉
喔沒事
沒注意到你有proxy轉址
我推測他沒搞清楚port跟localhost的意思。因為後面還出現了內網網域的ip連結方式了。
推測他對這一塊還搞不清楚。

可能是被趕鴨子上架處理了吧。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2019-02-20 16:25:14
最佳解答

從錯誤訊息來看,你並未有該目錄或檔案的連接權限。
只是我對你的連結域名很感興趣。

你可以正常讀取的連結是4200port。
但你確在問8070port無法連結???

也就是說,你如果是在js中是讀取4200的port。因該就可以正常了吧。
為何需要用8070的port讀呢??

看更多先前的回應...收起先前的回應...
Homura iT邦高手 1 級 ‧ 2019-02-20 16:29:04 檢舉

它應該是丟到IIS後有什麼設定問題

qwer2561 iT邦研究生 5 級 ‧ 2019-02-20 16:58:48 檢舉

https://ithelp.ithome.com.tw/upload/images/20190220/20114624kgOk00GqjM.png

https://ithelp.ithome.com.tw/upload/images/20190220/20114624iQEfUtiEga.png
我把IIS上的port改成4200,還是一樣出現404 error!!

怎麼變192.168.200.12了@@"
你要跑之前,是否可以先在你的瀏覽器上跑一次看看啊。

而且~~~為何你會限制ip位址在192.168.200.12自砸腳啊。

你不該先限制ip吧。先用任意ip看看。然後再直接連結試試。
而且192.168因該也只是內網。你如果不是在本機的話。就需要在內網域中跑。如果在外網跑一定連不到的。

如果是本機的話。你原本的localhost不就可以了。

還是你現在搞不太清楚ip跟網路的相對應性??

先告訴我你目前的開發環境情況好了。

1.你現在是跟iis同一台主機一起做開發還是有一台開發用主機,一台iis server主機。

2.呈1,如果是後者,兩台機器是否為同一條網域上。(白話點,是否在同一區域網路)

3.呈1,使用的ap。是否有先指定外網連接到其iis上。如果環境是屬於跟2點一樣的話。可以先忽視這個問題。

以上看是否你能明白了解並回答一下

qwer2561 iT邦研究生 5 級 ‧ 2019-02-20 17:12:05 檢舉

https://ithelp.ithome.com.tw/upload/images/20190220/20114624wcghM1Og8N.png
https://ithelp.ithome.com.tw/upload/images/20190220/20114624IJebrp5gwc.png

/images/emoticon/emoticon02.gif

我還是不懂是哪裡出了問題。 T_T

你先回答我上面的問題。不懂意思就直接說不懂。要不然很難教你的。

qwer2561 iT邦研究生 5 級 ‧ 2019-02-20 17:17:26 檢舉

1.IIS server主機跟Angular 7開發專案都在同一台主機上
2.目前是希望能在網域內給其他同事連線瀏覽,測試是否能正常使用取得開放資料。

那你先照著以下的動作進行處理

1.首先,先確定好你要用的port是什麼。並確定其它站台並未使用該port。這邊我就直接拿4200port為主。

2.先在本機用瀏覽器試試可否正常連結。可直接用http://127.0.0.1:4200 試試。正常如果有設定好的話。因該可以取到連結才對。如果不行的話。就是再回頭檢查你的iis的設定。這工作要先確定好。再來理你開發內的處理。

3.一但在本機可以正常連結的情況下。再來先查出你目前server的內網ip出來。

4.到其它台電腦,先ping剛找出來的ip。是否可以ping。這是要先確保你使用的電腦,確實是在同網區段內。如ping不到,請找可以ping到的

5.再用瀏覽器運行一次網頁 http://{剛查出的ip}:4200 。試試可否正常連結。如果不能的話。可以先將server上的防火先關掉後再試試。

6.以上如果都可以用的情況下。你的開發程式就可以用才對了。

1
froce
iT邦大師 1 級 ‧ 2019-02-21 12:55:38

要先把整個流程講清楚你才不會一頭霧水。
你的流程是這樣:
1.資料來源:桃園市...
2.IIS上的後端程式抓取資料來源,並產生bus4/GetRoute.json。
3.IIS上還有放前端程式(也就是你寫的Angular),供其他人使用。

你的問題是出在2上。
如果後端程式是你寫的,先去IIS伺服器上檢查是不是有正確產生json檔、IIS有沒有權限去存取此json檔、後端程式的bind的ip和port對不對等問題。
不會用IIS的去找管理server的IIS管理員協助。
對的話,如果你的後端程式沒做檢查ajax也不用認證,應該在瀏覽器輸入正確網址即可顯示json檔的內容。

另外如果你開發機和伺服器如果不同機的話,我猜你開發時有模擬的json檔放在Angular專案裡,造成 ng server 可以連。
剛剛查了一下,port 4200的確是ng server預設的。

我要發表回答

立即登入回答