C# Windows 10 mobile universal应用程序上的WCF错误

C# Windows 10 mobile universal应用程序上的WCF错误,c#,.net,wcf,windows-10-universal,windows-10-mobile,C#,.net,Wcf,Windows 10 Universal,Windows 10 Mobile,拥有需要呼叫WCF服务的Windows 10移动应用程序。这是一项现有服务,运行在另一台服务器(c#/IIS)上,我可以很好地连接到该服务,并使用以下代码从我的Xamarin.Android应用程序拨打电话: public PacTracMobileServerClient GetClient() { var config = new Config.AppConfig(); var serverUrl = config.GetODSServerAd

拥有需要呼叫WCF服务的Windows 10移动应用程序。这是一项现有服务,运行在另一台服务器(c#/IIS)上,我可以很好地连接到该服务,并使用以下代码从我的Xamarin.Android应用程序拨打电话:

    public PacTracMobileServerClient GetClient()
    {
        var config = new Config.AppConfig();
        var serverUrl = config.GetODSServerAddress;

        var binding = new CustomBinding();
        //TODO: Make these timeouts configurable
        binding.SendTimeout = TimeSpan.FromMinutes(2);
        binding.ReceiveTimeout = TimeSpan.FromMinutes(2);

        var tme = new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8);
        binding.Elements.AddRange(tme);

        if (serverUrl.StartsWith("https", StringComparison.CurrentCultureIgnoreCase))
        {
            //HTTPS binding
            var https = new HttpsTransportBindingElement
            {
                MaxReceivedMessageSize = int.MaxValue,
                MaxBufferSize = int.MaxValue,
                RequireClientCertificate = false,
            };
            binding.Elements.Add(https);

            //Trust all certificates
            //ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
        }
        else
        {
            //HTTP binding
            var http = new HttpTransportBindingElement
            {
                MaxReceivedMessageSize = int.MaxValue,
                MaxBufferSize = int.MaxValue
            };
            binding.Elements.Add(http);
        }

        var endPoint = new EndpointAddress(new Uri(serverUrl));

        return new PacTracMobileServerClient(binding, endPoint);
    }
同样,上面的内容在Xamarin.Android中也可以使用(尽管如果有建议,我会很乐意改进)。由于我的Xamarin.Android实现是.Net,我希望它能与这个Windows UWP应用程序一起工作。除了因为信任所有证书而被注释掉的行之外,一切似乎都很好,因为似乎ServicePointManager在UWP中不受支持

综上所述,当我尝试在我的UWP应用程序中使用此客户端拨打电话时,我遇到以下错误

net\u http\u客户端\u执行\u错误

所以,有两个问题

  • 我上面的代码有什么问题?我如何将其更改为与我的UWP应用程序一起使用,以便调用WCF服务

  • 我想知道我的问题是否是因为证书,因为Android(工作)和UWP(不工作)之间的唯一区别是我不得不为ServicePointManager注释的行。如何为UWP实现类似的功能?基本上,这个应用程序只在内部使用,我不想也不需要在调用服务时担心证书

  • 注意:我确实在我的包清单中启用了Internet(客户端和服务器)、Internet(客户端)和专用网络(客户端和服务器)的功能。此外,我确认我已连接到网络,并且可以通过移动设备上的web浏览器访问服务


    谢谢

    我的第一个想法是,该服务可能在本地主机上运行,这可能是UWP应用程序不允许的,如果是这样,请看一看。您可以通过查看此解决方案来解决#2。感谢您提供了这两种解决方案,我们将同时尝试这两种解决方案。关于更多信息,我正在从我的开发环境通过usb部署到移动设备,并在调试中运行时从移动设备尝试,移动设备通过wifi连接到我的网络,wifi可以访问服务器。“我想这是可行的,而且是被允许的。”谢尔比兹我两种都试过了。首先,我没有环回问题。其次,我确认我的问题可能是由于证书问题。我阅读了您的第二个链接,它看起来像是我需要忽略的证书问题,但它使用了httpbaseprotocolfilter,然后您将其传递到httpclient,但正如您从上面的代码片段中所看到的,我使用的wcf客户端是通过添加不使用httpclient的服务引用实现的。我如何在我的wcf代码中仍然实现这些过滤器?是的,我想我在最初研究这个问题时忽略了这个事实。您可以尝试查找我认为不是最好的解决方案,但您可以为证书问题添加协议过滤器。唯一的其他选择可能是查看服务使用的证书,看看它是否确实无效(过期等),并修复该问题。我的第一个想法是,该服务可能在本地主机上运行,而UWP应用程序可能不允许该服务,如果是,请查看。您可以通过查看此解决方案来解决#2。感谢您提供了这两种解决方案,我们将同时尝试这两种解决方案。关于更多信息,我正在从我的开发环境通过usb部署到移动设备,并在调试中运行时从移动设备尝试,移动设备通过wifi连接到我的网络,wifi可以访问服务器。“我想这是可行的,而且是被允许的。”谢尔比兹我两种都试过了。首先,我没有环回问题。其次,我确认我的问题可能是由于证书问题。我阅读了您的第二个链接,它看起来像是我需要忽略的证书问题,但它使用了httpbaseprotocolfilter,然后您将其传递到httpclient,但正如您从上面的代码片段中所看到的,我使用的wcf客户端是通过添加不使用httpclient的服务引用实现的。我如何在我的wcf代码中仍然实现这些过滤器?是的,我想我在最初研究这个问题时忽略了这个事实。您可以尝试查找我认为不是最好的解决方案,但您可以为证书问题添加协议过滤器。唯一的其他选择可能是查看服务使用的证书,以查看它是否确实无效(过期等),并修复该问题。