C# 无法通过vpn解析主机名

C# 无法通过vpn解析主机名,c#,wcf,xamarin,xamarin.ios,xamarin.forms,C#,Wcf,Xamarin,Xamarin.ios,Xamarin.forms,我一直在尝试让我的应用程序连接到公司网络中的WCF服务 我们使用VPN来保持一切的隐蔽性和安全性 我尝试了几种不同的方法,但我无法让手机连接到该服务 我首先将该服务添加为服务引用,并使用正确的URL构建客户端,但这没有做任何事情,然后在大约50秒后出现一条无法描述的错误消息 然后我切换到System.Net.HttpClient。大约50秒后再次失败,但这次抛出System.Net.WebException,消息为“找不到具有指定主机名的服务器” 我最后也尝试了ModernHttpClient,

我一直在尝试让我的应用程序连接到公司网络中的WCF服务

我们使用VPN来保持一切的隐蔽性和安全性

我尝试了几种不同的方法,但我无法让手机连接到该服务

我首先将该服务添加为服务引用,并使用正确的URL构建客户端,但这没有做任何事情,然后在大约50秒后出现一条无法描述的错误消息

然后我切换到System.Net.HttpClient。大约50秒后再次失败,但这次抛出System.Net.WebException,消息为“找不到具有指定主机名的服务器”

我最后也尝试了ModernHttpClient,结果与以前一样

(请注意,我首先在本地计算机上的测试控制台应用程序项目中尝试了前两个,以确保它们能够成功完成请求)

为了确保我没有发疯,并且VPN正确解析了名称,我在应用程序中创建了一个测试页面,该页面上只有一个WebView,源设置为服务url。
我打开应用程序并导航到测试页面,它毫无问题地加载了服务定义页面

作为参考,这是我使用ModernHttpClient的当前代码:

using (var client = new HttpClient(new NativeMessageHandler()))
{
    const string soap = "<soap msg>";
    client.DefaultRequestHeaders.Add("SOAPAction", "<service namespace>");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));

    using (var response = await client.PostAsync("http://<url>/Service.svc", new StringContent(soap, Encoding.UTF8, "text/xml")))
    {
        using (var content = response.Content)
        {
            // parse the xml result
        }
    }
}
使用(var-client=new-HttpClient(new-NativeMessageHandler()))
{
const string soap=“”;
client.DefaultRequestHeaders.Add(“SOAPAction”,即“”);
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“text/xml”);
使用(var response=wait client.PostAsync(“http:///Service.svc,新的StringContent(soap,Encoding.UTF8,“text/xml”))
{
使用(var content=response.content)
{
//解析xml结果
}
}
}

我是否应该做一些特殊的事情来告诉HttpClient它必须使用VPN?我认为这是自动处理的。

我查看了VPN配置,以确保它是正确的。
我查看了DNS配置,以确保其正确解析。
我查看了手机的配置,以确保它是正确的

我最终发现问题出在Airwatch的隧道VPN上

VPN仅在应用程序首次启动时起作用

如果VPN保持打开状态,并且在应用程序重新启动之前未关闭,则它将不允许连接通过


期待一个补丁形式的airwatch很快应该(希望)纠正这个问题

服务器名称是否仅为内部名称?您的VPN连接是否为内部网络提供名称解析?似乎只要名称解析和路由表都很好,它就可以工作。@krioye服务器名称仅为内部名称,是的。vpn的东西有点让我摸不着头脑(它是由服务器工程师和安全人员设置的),但实际上vpn(airwatch tunnel)配置为将具有特定ID的应用程序的所有流量路由到内部网络。这可以在WebView、Safari和phonegap包装的应用程序中实现,但不能通过Xamarin HttpClient/ServiceReference实现。