繁体   English   中英

Microsoft.SqlServer.Types在Azure辅助角色上无法正常运行

[英]Microsoft.SqlServer.Types not functioning properly on Azure Worker Role

我希望通过EntityFramework与Azure工作者角色中的SQL Server数据库进行通信来使用DbGeography。 据我了解,DbGeography在后台使用Microsoft.SqlServer.Types / SqlServerSpatial110.dll,所以为了让它在Azure中工作,我遵循:

http://blogs.msdn.com/b/adonet/archive/2013/12/09/microsoft-sqlserver-types-nuget-package-spatial-on-azure.aspx并安装了nuget包,然后我指定了在WorkerRole.cs中的OnStart方法中加载SQL Server类型:

public override bool OnStart()
        {
            // Load SQL Server Types
            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

然后我也按照这篇博文https://alastaira.wordpress.com/2011/08/19/spatial-applications-in-windows-azure-redux-including-denali/ ,在那里我明确地将SqlServerSpatial110.dll添加到项目中并设置它始终复制。

所以真正的问题是 - 在部署之后,一切都按预期工作。 但是, 如果我单独离开Azure Worker角色(约30分钟)并且它没有收到请求,则我的代码的DbGeography部分不再起作用。

  • 我还需要做些什么吗?
  • 我是否将LoadNativeAssemblies调用放在错误的位置(它应该在Run()上吗?)
  • Azure工作者角色会被回收吗?
  • 有没有人在使用DbGeography和Azure Worker Role之前遇到过这个问题,或者对可能发生的事情有任何见解?

回复很晚,但我在寻找解决方案时找到了你的问题。 如何在Azure函数中加载SQL Server类型。

主要问题是代码运行的路径与其他应用程序类型不同。 所以你不能使用建议:

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin")); or
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

在Azure Function Run参数中,添加ExecutionContext上下文,允许您检索工作文件夹。

通过向上导航一个级别,您可以使用此路径加载SQL Server类型:

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log, ExecutionContext context)
{
    string path = context.FunctionDirectory;
    string newPath = Path.GetFullPath(Path.Combine(path, @"..\"));
    SqlServerTypes.Utilities.LoadNativeAssemblies(newPath);

我已经确定我的问题是EntityFramework没有完全加载实体,而不是与Microsoft.SqlServer.Types有任何关系,但我留下这个问题而不是删除,以防万一它会帮助某人。

我不知道这是否是正确的做法,所以版主/更聪明的人,请随时编辑或做任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM