Npgsql尝试连接数据库" postgres"

时间:2014-09-30 11:15:19

标签: asp.net-mvc postgresql

我有简单的ASP.NET MVC 4应用程序(刚刚创建它),它通过NpSQL + EF客户端连接到远程PostgreSQL服务器。但它试图连接到数据库" postgres"这是不允许的:

  

Npgsql.NpgsqlException:FATAL:28000:没有pg_hba.conf条目用于主机&#34; myipaddress&#34;,用户&#34; myuser&#34;,数据库&#34; postgres&#34;,SSL on < / p>

其他webapp使用相同的Web.config没有任何问题。我看到的只有不同版本的Npgsql和Npgsql.EntityFramework库。工作有2.1.3,有错误2.2.1。但是当我降级它们时,它不起作用。

它适用于没有ph_hba.conf修改的开发机器(localhost可以访问任何用户和任何数据库)。

Web服务器正在Windows Server 2012 R2 + IIS8.5上运行

为什么一个应用程序试图访问数据库&#34; postgres&#34;和其他不?如何解决?

感谢您的帮助。

的Web.config:

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Server=myserver;port=1234;Database=mydatabase;User Id=myuser;Password=xxx;SearchPath=dbo;SSL=True" providerName="Npgsql" />
    <add name="DefaultConnection_DatabasePublish" connectionString="Server=myserver;port=1234;Database=mydatabase;User Id=myuser;Password=xxx;SearchPath=dbo;SSL=True" providerName="Npgsql" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <customErrors mode="Off" />
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.data>
    <DbProviderFactories>
      <add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
    </DbProviderFactories>
  </system.data>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <contexts>
      <context type="DBConnectionTester.Models.UsersContext, DBConnectionTester">
        <!--<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MvcSlap.Models.UsersContext, MvcSlap], [MvcSlap.Migrations.Configuration, MvcSlap]], EntityFramework, PublicKeyToken=b77a5c561934e089">
          <parameters>
            <parameter value="DefaultConnection_DatabasePublish" />
          </parameters>
        </databaseInitializer>-->
      </context>
    </contexts>
    <providers>
      <!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
      <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />
    </providers>
  </entityFramework>

</configuration>

2 个答案:

答案 0 :(得分:0)

这是迁移的问题,它不适用于NPgSQL 2.1。我让他们在其他网络应用程序中被禁用,但由于某些原因,我不知道,他们在这个应用程序中活跃并导致问题。本地和服务器数据库之间的唯一区别是服务器上存在表__MigrationHistory,我已将其重命名为其他名称,现在可以正常工作。

答案 1 :(得分:0)

道歉,但我不能发表评论。

我的问题至少与OP非常相似,但我不理解解决方案。我得到了相同的NpgsqlException数据库名称是&#34; postgres&#34;但应该是我在connectionstring中指定的内容。

设置

  1. 我的网络服务器设置是相同的,即Windows Server 2012和IIS 8.5。
  2. Postgresql数据库在它自己的机器上。
  3. 开发者机器和Web服务器目前正在使用相同的 数据库,在2)中定义
    • 开发者机器正确连接
    • Web服务器在OP
    • 中获取NpgsqlException
  4. 使用msbuild.exe创建程序包,使用msdeploy.exe将程序包部署到Web服务器
  5. 修改

    原来,允许访问数据库&#34; postgres&#34;在pg_hba.conf文件中解决了我的问题。