Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何解决一个问题;名称解决方案失败“;尝试从每种类型的internet连接收集数据时出错?_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 我如何解决一个问题;名称解决方案失败“;尝试从每种类型的internet连接收集数据时出错?

C# 我如何解决一个问题;名称解决方案失败“;尝试从每种类型的internet连接收集数据时出错?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我目前使用的是Httpclient,我可以通过数据所在地的特定网络/互联网连接成功收集数据 但是,当我尝试在家中通过另一个internet连接收集数据时,我收到一个“NameResolutionFailure”错误 我的目标是能够从任何类型的连接获取数据,但我不确定我在这里遗漏了什么。(我也是这方面的新手) 这是我与db对话时使用的代码: string dataurl = "my-url-here"; var http = new HttpClientHandler() { C

我目前使用的是
Httpclient
,我可以通过数据所在地的特定网络/互联网连接成功收集数据

但是,当我尝试在家中通过另一个internet连接收集数据时,我收到一个“NameResolutionFailure”错误

我的目标是能够从任何类型的连接获取数据,但我不确定我在这里遗漏了什么。(我也是这方面的新手)

这是我与db对话时使用的代码:

 string dataurl = "my-url-here";

 var http = new HttpClientHandler()
 {
     Credentials = new NetworkCredential("user", "password", "domain"),
 };

 var httpClient = new HttpClient(http);

 try
 {
     var result = await httpClient.GetStringAsync(dataurl);
     System.Diagnostics.Debug.WriteLine(result);
 }

 catch (HttpRequestException ex)
 {
     if (ex.GetBaseException() != null)
     {

     System.Diagnostics.Debug.WriteLine(ex.GetBaseException().Message); //this is where i recieve the NameResolutionFailure error
     }
     else
     {
     System.Diagnostics.Debug.WriteLine(ex.Message);
     }
  }
为什么我只能在某个网络上访问数据,而不是在每个网络上?我是缺少代码还是有其他原因


感谢所有我能得到的帮助、提示、代码示例

问题可能出现在
字符串dataurl=“我的url在此”以及可从何处访问。可能存在两个障碍:

  • 名称解析
  • 网络接入
虽然您的错误消息只提到名称解析,但我猜您还需要对网络访问做些什么

名称解析(DNS)是将主机名转换为IP地址

当您在工作网络上时,将有一个名称解析服务,它将本地计算机名称解析为网络上的I.p.地址。通常,这些本地计算机名称对公共DNS服务器不可见。如果您将设备连接到其他网络(例如移动网络),它将使用公共DNS服务器,而这些服务器对名为计算机的本地域一无所知

例如,
MyServer
可能会在您的本地网络上解析,因为它是本地域的一部分,而本地网络基础设施将对此进行排序
MyServer.MyCompany.com
通常是类似的,因为默认情况下机器名称不会对外公开

对于移动应用程序,您需要一个公共域名。类似于
MyServer.MyDomain.com
(或者
www.google.com
是一样的,本质上是一样的)。公共DNS服务器将此名称转换为IP地址

这可能就是您遇到的问题发生的地方。您可能正在使用公共DNS服务器不知道的本地主机名

如果您为某个组织工作,他们可能已经拥有一个域,或者您可能需要为您的应用程序购买一个域。
同时,您可以查看一种动态DNS解决方案,它可以让您在开发过程中取得进展

对于我的Xamarin应用程序,我在开发时使用本地机器的名称,并且移动设备位于同一网络上

如果我不在同一个网络上,我可以使用VPN。这就像我在同一个网络上一样连接到工作网络。如果我在家开发,并且两台设备都在我的家庭网络上,我会使用我的开发箱的IP地址,因为我没有在我的家庭wifi上使用本地DNS

当我们发布时,我们使用公共URL,比如
api.MyApp.com
——公共DNS指向我们的prod服务器

网络访问可能也是您需要处理的事情

网络工程师的一项主要工作是阻止黑客进入。当您的移动设备与服务器位于同一网络上时(即,当它为您工作时),这不是一个问题,因为大多数网络都经过配置,以便同一网络上的两个设备可以看到对方。如果你的应用程序可以在一个连接上看到你的服务器,听起来这就是你拥有的那种网络

但是,如果您需要从移动网络连接到服务器,则需要一种方法来通知网络路由器将特定流量从internet转发到服务器。
这会变得复杂,但出于开发目的,我看到的有效策略有:

  • VPN-我们有一个VPN,我在移动设备上启动,输入我的工作网络凭据,然后我就可以像在同一网络上一样访问我的开发箱
  • 虚拟服务器/端口转发-如果您在家,您可能可以配置调制解调器将特定端口转发到您的开发箱。每个调制解调器都是不同的,所以您必须搜索特定调制解调器的指令
  • 网络工程师-如果你在一家公司,并且希望外部的流量能够到达你正在管理的服务器(并且没有VPN),那么你可能需要与你的网络部门谈谈。祝你好运

非常感谢您的回答。我已经读过了,但我还需要再读几遍才能完全理解它。当我将我的
数据url
粘贴到网络浏览器时,它确实会说:“无法访问网页,无法找到服务器的dns服务器…(url)”