我继承了用c#/ MVC(.NET 4.0)编写的Web应用程序
唯一麻烦的页面是访问Google地图的页面。它一直在给我可怕的403错误。我应该提到的是,发生了相同的问题,它已经工作了好几个月没有问题,而且突然之间就开始发生。可以想象Windows Update可能已经启动了此问题。我是否可以修改任何IIS设置或用户权限,以防止发生此问题。我尝试暂时向所有人用户授予完全访问权限,但这没什么区别。这是我可以提供的所有详细信息:
[WebException: The remote server returned an error: (403) Forbidden.]
System.Net.HttpWebRequest.GetResponse() +1646
System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy) +129
System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) +86
System.Xml.XmlTextReaderImpl.FinishInitUriString() +90
System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext) +99
System.Xml.Linq.XDocument.Load(String uri, LoadOptions options) +84
GoogleMaps.LocationServices.GoogleLocationService.GetLatLongFromAddress(String address) +165
URS.Web.Controllers.TherapistController.GetPatientLatLong(String address) +70
URS.Web.Controllers.TherapistController.ShowReferral(Int32 RefId, Int32 Disciplineid, Int32 ReferalDetailsId, String pagenumber) +603
lambda_method(Closure , ControllerBase , Object[] ) +307
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +229
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +71
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +72
System.Web.Mvc.Async.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41() +385
System.Web.Mvc.Async.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41() +385
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +38
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +67
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +43
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +67
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +607
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +134
在我的Controller文件中,唯一使用Google Maps的方法如下:
private Dictionary<string, double> GetPatientLatLong(string address)
{
Dictionary<string, double> latlong = new Dictionary<string, double>();
var Patientadd = address;
var locationService = new GoogleLocationService();
var point = locationService.GetLatLongFromAddress(Patientadd);
if (point != null)
{
var latitude = point.Latitude;
var longitude = point.Longitude;
latlong.Add("latitude", latitude);
latlong.Add("longitude", longitude);
}
else
{
latlong.Add("latitude", 0);
latlong.Add("longitude", 0);
}
return latlong;
}
在.cshtml文件中,该文件写在顶部
<script src="https://maps.googleapis.com/maps/api/js?key={thekey}"></script>
其次:
<script>
google.maps.event.addDomListener(window, 'load', initialize);
function initialize() {
var markerArray = [];
var infoWindow = new google.maps.InfoWindow();
var miles = @Model.TherapRadius;
var myLatlng1 = new google.maps.LatLng(@Model.TherapLat, @Model.TherapLong);
var myLatlng2 = new google.maps.LatLng(@Model.patientLat, @Model.patientLong);
var mapOptions = {
center: new google.maps.LatLng(29.760193,-95.369390),
zoom:10,
}
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var geocoder = new google.maps.Geocoder();
var marker1;
for (var i = 0; i < myModel.coveringAreas.length; i++) {
var markerloop = new google.maps.Marker({
position: new google.maps.LatLng( myModel.coveringAreas[i].Latitude, myModel.coveringAreas[i].Longitude),
map: map,
title: 'Therapist Location: ' + myModel.coveringAreas[i].TherapistName
});
var markerModel = myModel.coveringAreas[i];
markerArray.push( { marker : markerloop, markerModl : markerModel });
}
var marker2 = new google.maps.Marker({
position: myLatlng2,
map: map,
title: 'Patient Location',
color:"Blue",
icon:"http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png"
});
marker2.setMap(map);
for (i = 0; i < markerArray.length; i++) {
addMarkerDetails(i);
}
}
function addMarkerDetails(i)
{
var listenerMarker = markerArray[i].marker;
var therapistDetails = markerArray[i].markerModl;
google.maps.event.addListener(listenerMarker, 'click', function(e) {
var clickText = "<div id='infoDiv'>" +
"<h3>Therapist Name:</h3>" + therapistDetails.TherapistName + "" +
//"<h3>Address:</h3>" + therapistDetails.Location +
"<div>" ;
infoWindow.setContent(clickText);
infoWindow.open(listenerMarker.get('map'), listenerMarker);
});
google.maps.event.addListener(marker2, 'click', function(e) {
var clickText = "<div id='infoDiv'>" +
"<h3>Patient Name:</h3>" + '@Model.LastName' +", "+ '@Model.FirstName' + "" +
"<h3>Address:</h3>" + '@Model.PatientFullAddress'+
"<div>" ;
infoWindow.setContent(clickText);
infoWindow.open(map, this);
});
}
var boundsListener = google.maps.event.addListener((map), 'bounds_changed', function(event) {
this.setZoom(10);
google.maps.event.removeListener(boundsListener);
});
}
</script>
这是事件查看器中的条目:
Log Name: Application
Source: ASP.NET 4.0.30319.0
Date: 08/28/18 9:58:55 AM
Event ID: 1309
Task Category: Web Event
Level: Warning
Keywords: Classic
User: N/A
Computer: MyWeb
Description:
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 8/28/2018 9:58:55 AM
Event time (UTC): 8/28/2018 2:58:55 PM
Event ID: 755907cfe9ef41ae875f99ef89aa9abb
Event sequence: 658
Event occurrence: 6
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/2/ROOT-1-131799399080579812
Trust level: Full
Application Virtual Path: /
Application Path: C:\inetpub\wwwroot\MYWEB\
Machine name: MYWEB
Process information:
Process ID: 2012
Process name: w3wp.exe
Account name: IIS APPPOOL\MYWEB
Exception information:
Exception type: WebException
Exception message: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.XmlTextReaderImpl.FinishInitUriString()
at System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
at System.Xml.Linq.XDocument.Load(String uri, LoadOptions options)
at GoogleMaps.LocationServices.GoogleLocationService.GetLatLongFromAddress(String address)
at MYWEB.Web.Controllers.TherapistController.GetPatientLatLong(String address)
at MYWEB.Web.Controllers.TherapistController.GetPatientCoordinates(Int32 id)
at MYWEB.Web.Controllers.TherapistController.GetAllTherapist(DataSourceRequest request, Int32 disciplineId, Int32 refDetailId)
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Request information:
Request URL: http://ursuatweb.southcentralus.cloudapp.azure.com/Therapist/GetAllTherapist/?disciplineId=1&refDetailId=1805
Request path: /Therapist/GetAllTherapist/
User host address: 75.107.154.176
User: Richardmartin
Is authenticated: True
Authentication Type: cookie
Thread account name: IIS APPPOOL\MYWEB
Thread information:
Thread ID: 22
Thread account name: IIS APPPOOL\MYWEB
Is impersonating: False
Stack trace: at System.Net.HttpWebRequest.GetResponse()
at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.XmlTextReaderImpl.FinishInitUriString()
at System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
at System.Xml.Linq.XDocument.Load(String uri, LoadOptions options)
at GoogleMaps.LocationServices.GoogleLocationService.GetLatLongFromAddress(String address)
at MYWEB.Web.Controllers.TherapistController.GetPatientLatLong(String address)
at MYWEB.Web.Controllers.TherapistController.GetPatientCoordinates(Int32 id)
at MYWEB.Web.Controllers.TherapistController.GetAllTherapist(DataSourceRequest request, Int32 disciplineId, Int32 refDetailId)
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)