Я получаю систему.net.webexception с сообщением «Удаленное имя не может быть разрешено» при попытке сделать звонок в веб -службу с httpclient в ASP.NET MVC. Достаточно сбито с толку, у меня есть консольное приложение и сопроводительный модульный тест, который имеет практически идентичный код, который работает отлично.public HttpClient GetHttpClient(bool acceptVersion = true, string acceptType = @"application/json")
{
// This line was required to make this run without exception for
// my unit test
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
string key = "key"; // Obviously, abbreviated
var client = new HttpClient();
if (acceptVersion)
{
client.DefaultRequestHeaders.Add("Accept-version", "beta");
}
client.DefaultRequestHeaders.Add("AccessToken", key);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptType) { CharSet = "utf-8" });
client.BaseAddress = new Uri("API uri"); // Obviously, edited
return client;
}
< /code>
Мой фабричный метод буквально линейный на линии идентичен для моего рабочего теста.public static async Task PercentOfUsersCurrentlyActive()
{
string json;
using (var client = (new ConnectionFactory()).GetHttpClient(false))
{
// The exception occurs on this line
HttpResponseMessage message = await client.GetAsync("users");
json = await message.Content.ReadAsStringAsync();
}
UserCollection collection = JsonConvert.DeserializeObject(json);
int numActive = collection.content.Count(usr => usr.active);
double average = (double)((double)numActive / (double)collection.content.Count);
return average;
}
< /code>
и мой контроллер: < /p>
public class UserController : AsyncController
{
// GET: User
public async Task Index()
{
// I get the exception on here
double user = await Reports.General_Classes.User.GetActiveUsers();
return View(user);
}
}
< /code>
my Stack Trace: < /p>
[WebException: The remote name could not be resolved: '...']
System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) +606
System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) +64
[HttpRequestException: An error occurred while sending the request.]
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +28
Reports.General_Classes.d__36.MoveNext() in ...\User.cs:49
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
Report_Retriever.Controllers.d__0.MoveNext() in ...\UserController.cs:17
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +97
System.Web.Mvc.Async.c__DisplayClass37.b__36(IAsyncResult asyncResult) +17
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +48
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
System.Web.Mvc.Async.AsyncInvocationWithFilters.b__3d() +50
System.Web.Mvc.Async.c__DisplayClass46.b__3f() +225
System.Web.Mvc.Async.c__DisplayClass33.b__32(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +48
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
System.Web.Mvc.Async.c__DisplayClass2b.b__1c() +26
System.Web.Mvc.Async.c__DisplayClass21.b__1e(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +48
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
System.Web.Mvc.Controller.b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +48
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
System.Web.Mvc.Controller.b__15(IAsyncResult asyncResult, Controller controller) +12
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +48
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +48
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +129
< /code>
и вот рабочий код из моего DLL и модульного теста: < /p>
[TestMethod]
public async Task GetActiveUserTests()
{
double percent = await User.GetActiveUsers();
Assert.IsTrue(percent >= 0 && percent
и вот метод GetactiveUsers < /code> из моего приложения консоли DLL (который по существу идентичен методу, который я использую выше): < /p>
public static async Task GetActiveUsers()
{
string json;
using (var client = UtilityMethods.GetHttpClient(false))
{
HttpResponseMessage message = await client.GetAsync("users");
json = await message.Content.ReadAsStringAsync();
}
UserCollection collection = JsonConvert.DeserializeObject(json);
int numActive = collection.content.Count(usr => usr.active);
double average = (double)((double)numActive / (double)collection.content.Count);
return average;
}
< /code>
Как часть моего исследования, я прочитал следующие посты переполнения стека: < /p>
li> asp.net Исключение: удаленное имя не может быть разрешено: 'apiconnector.com' < /li>
/> < /ul>
В обоих этих случаях они могут получить доступ к удаленному месту из браузера, но не программно. Однако мой случай несколько отличается: я могу выполнять вызовы против API из модульного теста, но не из приложения ASP.NET MVC. Опять же, однако, это не точно применимо к моему случаю, потому что оба локально работают в визуальной студии. Кодовая работа в модульном тесте, но практически идентичный код не работает в ASP.NET MVC?
Подробнее здесь: https://stackoverflow.com/questions/463 ... ice-in-asp
«Удаленное имя не может быть разрешено» при вызове веб -службы в ASP.NET MVC, но практически идентичный модульный тест д ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение