У вас есть приложение Windows 10 Mobile, которому необходимо совершать вызовы службы WCF. Это существующая служба, работающая на другом сервере (С#/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_http_client_execution_error
Итак, два вопроса.
Что не так с моим кодом выше и как я могу изменить его для работы с моим приложением UWP, чтобы я мог вызывать службу WCF?
Мне интересно, связана ли моя проблема с сертификатами, поскольку единственная разница между Android (работает) и UWP (не работает) — это строка, которую мне пришлось прокомментировать для ServicePointManager. Как я могу реализовать что-то подобное для UWP? По сути, это приложение используется только для внутренних целей, и я не хочу и не должен беспокоиться о сертификатах при вызове службы.
Примечание. Я включил возможности для Интернета (клиент и сервер), Интернета (клиент) и частных сетей (клиент и сервер) в своем манифесте пакета. Кроме того, я убедился, что подключен к сети и могу получить доступ к сервису из веб-браузера на мобильном устройстве.
Спасибо!