2

Я пытаюсь создать многоугольник типа DbGeometry. он отлично работает на моей локальной машине, но я получаю сообщение об ошибке при возврате оператора при размещении моего сайта в роли Azure Web.SqlGeometry/DbGeometry Исключительное исключение при размещении на Azure Web Role

Код:

string polygon = “POLYGON ((-30.3637216 30.7124139,-30.3632216 30.7124139,-30.3632216 30.7129139,-30.3637216 30.7129139,-30.3637216 30.7124139))”; 

return DbGeometry.FromText(polygon, 4326); 

Исключение:

Exception has been thrown by the target of an invocation. 


at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 

    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 

    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 

    at System.Data.SqlClient.SqlSpatialServices.GeometryFromText(String geometryText) 

    at Library.Modules.FindMyWay.SpatialFunctions.GetDefaultBox(Decimal latitude, Decimal longitude) 

    at Library.Stop.ImportStops(String userName, IEnumerable`1 stops, Int32 companyId) Inner Exception: at Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoMarshalData g, Boolean& result) 

    at Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoData g) 

    at Microsoft.SqlServer.Types.SqlGeometry.IsValidExpensive() 

    at Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid) 

    at Microsoft.SqlServer.Types.SqlGeometry.Parse(SqlString s) 

Есть ли у вас какие-либо идеи, почему этот полигон недопустимый?

+1

Я не У меня есть ответ, но я просто хотел прокомментировать, что мы видим аналогичную проблему, когда SqlGeometry будет работать во всех контекстах, кроме как при работе в качестве лазурной веб-роли. Он работал на местном уровне. Он работал как лазурный веб-сайт. Просто не как webrole. – chrismay

ответ

1

Хорошо, я это исправил окольным путем, путем преобразования SqlGeometry в DbGeometry:

is there something like dbgeometry makevalid in .net 4.5

SqlGeometry geom = SqlGeometry.STPolyFromText(new SqlChars(new SqlString(polygon)), 4326); 
       return DbGeometry.FromBinary(geom.STAsBinary().Buffer); 

Этот код произвел исключение:

Unable to load DLL 'SqlServerSpatial.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 

Чтобы исправить :

Unable to load DLL 'SqlServerSpatial.dll'

DLL, 64 бит в результате этого исключения:

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) 

Так что мне пришлось добавить DLL 32bit к проекту для работы с Azure.

Результат: Прекрасно сейчас, но я все еще не уверен, почему DbGeometry не работает на Azure, также не уверен, почему 64-разрядная DLL не работает на Azure.

0

У меня была та же проблема. Моя починка поставить следующие библиотеки DLL в папке C:/Windows/System32:

SqlServerSpatial.dll SqlServerSpatial110.dll

Entity Framework использует эти библиотеки DLL в соответствии с этим источником: https://alastaira.wordpress.com/2011/08/19/spatial-applications-in-windows-azure-redux-including-denali/