我一直在尝试让我的应用连接到公司网络中的WCF服务。
我们使用VPN来保持一切隐藏和安全。
我尝试了几种不同的方法,而且我无法让手机连接到该服务。
我首先将服务作为服务引用添加,并使用正确的URL构建客户端,但这只是什么都没做,然后在大约50秒后失败并显示一条非描述性错误消息。
然后我切换到System.Net.HttpClient。这在大约50秒之后再次失败,但这次它抛出了一个带有消息&#34的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
}
}
}
我应该做些什么来告诉HttpClient它必须使用VPN吗?我认为这是自动处理的。
答案 0 :(得分:1)
我调查了VPN配置以确保它是正确的 我调查了DNS配置以确保它能够正确解析 我调查了手机的配置以确保它是正确的。
我最终发现问题是Airwatch的隧道VPN问题。
VPN仅在应用首次启动时有效。
如果VPN在应用程序重新启动之前保持打开状态并且未关闭,则它将不允许连接通过。
很快就会期待一个补丁形式的气表,希望能够(希望)纠正这个问题!