Веб-служба с .net не подключается к базе данных mysql в информационной службе interner

#c# #mysql #.net #web-services #iis

#c# #mysql #.net #веб-службы #iis

Вопрос:

Я написал веб-сервис, который подключается к базе данных mysql и предоставляет api. Он отлично работает, когда я запускаю его в Visual Studio. Теперь я хочу, чтобы он работал, когда я помещаю его в информационную службу Интернета. Но api не возвращает. Мое одностраничное приложение, которое ожидает запуска этого api, выдает ошибку ниже

  GET http://localhost:8024/api/Interviewee 500 (Internal Server Error)


angular.js:15536 Possibly unhandled rejection: {"data":{"Message":"An error has occurred.","ExceptionMessage":"Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.","ExceptionType":"System.InvalidOperationException","StackTrace":"   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternalamp; connection)rn   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)rn   at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)rn   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)rn   at System.Data.SqlClient.SqlConnection.Open()rn   at IntervieweeService.Controllers.IntervieweeController.GetInterviewees() in C:\Projects\IntervieweeApp\IntervieweeService\IntervieweeService\Controllers\IntervieweeController.cs:line 30rn   at lambda_method(Closure , Object , Object[] )rn   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_1.<GetExecutor>b__3(Object instance, Object[] methodParameters)rn   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)rn--- End of stack trace from previous location where exception was thrown ---rn   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()rn   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)rn   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()rn--- End of stack trace from previous location where exception was thrown ---rn   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()rn   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)rn   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()rn--- End of stack trace from previous location where exception was thrown ---rn   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()rn   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)rn   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()"},"status":500,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"http://localhost:8024/api/Interviewee","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":"Internal Server Error","xhrStatus":"complete"}
(anonymous) @ angular.js:15536
(anonymous) @ angular.js:11815
processChecks @ angular.js:17946
$digest @ angular.js:19075
$apply @ angular.js:19463
done @ angular.js:13312
completeRequest @ angular.js:13569
requestLoaded @ angular.js:13474
load (async)
(anonymous) @ angular.js:13457
sendReq @ angular.js:13257
serverRequest @ angular.js:12998
processQueue @ angular.js:17914
(anonymous) @ angular.js:17962
$digest @ angular.js:19075
$apply @ angular.js:19463
done @ angular.js:13312
completeRequest @ angular.js:13569
requestLoaded @ angular.js:13474
load (async)
(anonymous) @ angular.js:13457
sendReq @ angular.js:13257
serverRequest @ angular.js:12998
processQueue @ angular.js:17914
(anonymous) @ angular.js:17962
$digest @ angular.js:19075
$apply @ angular.js:19463
bootstrapApply @ angular.js:1945
invoke @ angular.js:5122
doBootstrap @ angular.js:1943
bootstrap @ angular.js:1963
angularInit @ angular.js:1848
(anonymous) @ angular.js:36216
fire @ jquery-2.2.4.js:3187
fireWith @ jquery-2.2.4.js:3317
ready @ jquery-2.2.4.js:3536
completed @ jquery-2.2.4.js:3552
  

строка подключения

 Server=localhost;Port=8024;Database=intervieweedb;Uid=rrrr;Pwd=111;
  

Как я могу заставить это работать? Спасибо

Комментарии:

1. Вы уже отладили ее? 500 является очень общим, можете ли вы указать фактическую ошибку?

2. Как выглядит ваша строка подключения? Вы не получаете никаких подробностей в теле ответа? Вы должны увидеть трассировку стека генерируемого исключения.

3. Я добавил полную ошибку и строку подключения

4. Согласно документации .net connector, в строке подключения доступно довольно много параметров точной настройки. Вы уверены, что правильно удаляете все неиспользуемые соединения в своем коде? IIS управляет пулами приложений, это означает, что вы можете запустить множество экземпляров, которые могут легко использовать пул соединений.

5. Порт в вашей строке подключения указан неправильно. Если вы получаете доступ к своему веб-сайту через http://localhost:8024/api/Interviewee , то порт 8024 используется вашим веб-сервером. "Server=localhost;Port=8024" в вашей строке подключения, должно быть, ошибка, потому что MySQL должен быть запущен на другом порту.

Ответ №1:

Если вы заходите на свой веб-сайт поhttp://localhost:8024/api/Interviewee тогда порт 8024 используется вашим веб-сервером. Server=localhost;Port=8024 в вашей строке подключения неверно, потому что MySQL должен быть запущен на другом порту.

Измените Port в вашей строке подключения к MySQL номер порта вашего сервера MySQL (обычно 3306 ).