2017-01-23 19 views
0

我有一个xamarin android应用程序,当我尝试从本地IIS托管的MVC网站下载图像时,它失败。Xamarin从局域网下载的Android失败

防火墙是关闭的,genymotion模拟器中我可以看到OS浏览器上的文件,但是当我通过我的xamarin的应用程序下载的文件时发生异常:NameResolutionFailureException.

访问互联网上的Android权限设置

using (var webClient = new WebClient()) 
{ 
    var imageByte = webClient.DownloadData("http://10.0.3.2/imgs/1.jpg"); 
} 
+0

确定本地子网是否为'10.0.3.XXX',即'adb shell ifconfig'并查看模拟器上配置的接口。确保你的模拟器可以ping你的PC,例如'adb shell ping 10.0.3.2'(用正确的子网替换IP地址...) – SushiHangover

+0

你设置了凭证吗? webClient.Credtials = new System.Net.NetworkCredential(“user”,“pw”); – user1230268

回答

1

您可能需要打开防火墙您的电脑上,以便接受来自您的仿真器具备IP的远程连接(使用adb shell ifconfig为SushiHangover建议看看你的仿真器的IP地址)

要设置防火墙规则,以允许远程连接,请参阅本指南(这是关于WCF,但添加防火墙规则应该是相同的,无论使用的服务技术): https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/walkthrough_working_with_WCF/#Configuring_Remote_Access_to_IIS_Express

相关位(编辑拿WCF):

将IIS Express配置为接受远程连接 - 此步骤涉及编辑IIS Express的配置文件以接受特定端口上的远程连接,然后设置IIS Express的规则以接受传入流量。

向Windows防火墙添加例外 - 我们必须通过Windows防火墙打开远程应用程序可以使用的端口。 您需要知道工作站的IP地址。为了这个例子的目的,我们假定我们的工作站有IP地址192.168.1.143。

让我们从配置IIS Express开始监听外部请求。我们可以通过在[solutiondirectory] ​​.vs \ config \ applicationhost.config中编辑IIS Express的配置文件来完成此操作,如以下屏幕截图所示: Screenshot of config file 找到包含服务名称的网站元素。它应该看起来像下面这样的XML片段:

<site name="HelloWorldWcfHost" id="2"> 
    <application path="/" applicationPool="Clr4IntegratedAppPool"> 
     <virtualDirectory path="/" physicalPath="\\vmware-host\Shared Folders\tom\work\xamarin\code\private-samples\webservices\HelloWorld\HelloWorldWcfHost" /> 
    </application> 
    <bindings> 
     <binding protocol="http" bindingInformation="*:9607:localhost" /> 
    </bindings> 
</site> 

我们将需要添加另一个结合打开端口9608到外面的交通。以下XML添加到绑定元素,用你自己的IP地址替换IP地址:

<binding protocol="http" bindingInformation="*:9608:192.168.1.143" /> 

这将配置IIS Express来从任何远程IP地址中接受HTTP流量在端口9608上的外部电脑的IP地址。上面的代码片段假定运行IIS Express的计算机的IP地址为192.168.1.143。变更后,绑定元素应如下所示:

<site name="HelloWorldWcfHost" id="2"> 
    <application path="/" applicationPool="Clr4IntegratedAppPool"> 
     <virtualDirectory path="/" physicalPath="\\vmware-host\Shared Folders\tom\work\xamarin\code\private-samples\webservices\HelloWorld\HelloWorldWcfHost" /> 
    </application> 
    <bindings> 
     <binding protocol="http" bindingInformation="*:9607:localhost" /> 
     <binding protocol="http" bindingInformation="*:9608:192.168.1.143" /> 
    </bindings> 
</site> 

接下来,我们需要配置IIS快递接受端口9608的入站连接。启动了管理命令提示符,并运行此命令:

netsh http add urlacl url=http://192.168.1.143:9608/ user=everyone 

的最后一步是配置Windows防火墙以允许在端口9608.对外交通从管理命令提示符,运行以下命令:

netsh advfirewall firewall add rule name="IISExpressXamarin" dir=in protocol=tcp localport=9608 profile=private remoteip=localsubnet action=allow 

这个命令将允许在端口9608的传入流量从在同一子网作为Windows 10件作品的所有设备塔季翁。