最近在項目中遇到UWP調用WCF的需求,考慮到UWP不能寄宿WCF服務(如果能,或者有類似技術,請告知),於是寫了一個WPF程序寄宿WCF服務,然后再用UWP調用服務。
寫的時候並沒有碰到什么問題,直到我把UWP打包,連同WPF那個程序部署到另一台機器上去,然后就發現,丫的UWP一調用WCF里的方法就出問題,從日志里看錯誤都是“無法與遠程服務器建立連接”、“An error occured while sending a request”之類的。看到這個這種錯誤時候我以為是WPF那個出了什么問題,服務沒啟動成功之類,但是把服務地址貼在瀏覽器里看服務是正常的,以get請求方式調用WCF方法也是正常的,這可難壞我了,明明在我機器上是沒問題的啊(貌似這句話咱們程序員經常說?)
后來我又試驗了WPF與UWP在不同的機器上這種情況,發現這樣是沒問題的,感覺走投無路了……只好,向大佬伸出援手,所以在這里我再一次感謝vbfool大神的指點。
vb看了我的描述指出UWP默認沒有loop back權限,什么意思呢,就是不能訪問localhost或者127.0.0.1。這樣我遇到的問題就可以解釋了。大神畢竟是大神,不僅指出了問題,還給了解決方案,就是本篇我想跟大家分享的,為UWP應用開啟loopback權限。
我們只需要執行一下命令即可:
c:\>checknetisolation loopbackexempt -a -n=<package family name>
還可以根據應用容器的ID來執行相應的操作:
c:\>checknetisolation loopbackexempt -a -p= 接UWP應用SID
若要刪除回環訪問權限則執行-d即可
c:\>checknetisolation loopbackexempt -d -n/-p= PackageFamilyName/SID
大家可以參考https://msdn.microsoft.com/zh-cn/library/windows/apps/hh780593.aspx,不過里邊講的如何找package family name和SID我沒有試,我直接在項目中復制了package family name,至此,問題解決。
分享出來,供大家參考,如有問題,歡迎指正。