2016-07-18 17 views
5

Gần đây, tôi đã triển khai trang web của mình trên IIS (LocalDB). Nhưng bất cứ khi nào tôi cố gắng để chạy các trang web, SQL không kết nối. Tôi đã trải qua hàng trăm bài viết/bài viết ngay bây giờ nhưng tôi không thể giải quyết nó.SQL sẽ không kết nối sau khi triển khai

Lỗi

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.)

kiện Windows Application log

Windows API call SHGetKnownFolderPath returned error code: 5. Windows system error message is: Access is denied. Reported at line: 422.

Second log -

Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user.

kết nối của tôi Strings (đã thử cả hai) -

<appSettings> 
    <add key="ConnectionString" value="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True" /> 
    <!--<add key="ConnectionString" value="data source=(LocalDB)\MSSQLLocalDB;UID=SOME_USERNAME;PWD=SOME_PASSWORD;initial catalog=test;connection timeout=30"/>--> 
    </appSettings> 

Tôi đã thử chỉnh sửa applicationHost.config.
Load User Profile là đã True cho tôi nộp

My applicationHost.config

<applicationPools> 

      <add name="Classic .NET AppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" /> 
      <add name=".NET v2.0 Classic" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" /> 
      <add name=".NET v2.0" managedRuntimeVersion="v2.0" /> 
      <add name=".NET v4.5 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" /> 
      <add name=".NET v4.5" managedRuntimeVersion="v4.0" /> 
      <add name="ASP.NET v4.0" managedRuntimeVersion="v4.0"> 

      <add name="DefaultAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated"> 
      <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" /> 
      </add> 
     </applicationPools> 

quản lý IIS My - enter image description here

DefaultApplicationPool -

enter image description here

My cấu hình ứng dụng web -
enter image description here

App bơi phép
enter image description here

EDIT -

Added IIS AppPool sử dụng

icacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX) 

Vẫn không thể kết nối.

Mọi trợ giúp đều được đánh giá cao.

Tôi đang sử dụng Visual Studio 2015 với SQL Server 2016.

+0

Bạn có cho phép tải Hồ sơ người dùng cho tài khoản chạy các hồ bơi ứng dụng? – Tim

+0

@Tim Tải Hồ sơ Người dùng đã đúng đối với tôi. –

+0

Có, nhưng khi bạn nói điều đó là đúng cho bạn, bạn có nghĩa là tài khoản của bạn, hoặc cho tài khoản chạy các ứng dụng hồ bơi của ứng dụng? – Tim

Trả lời

0

Tôi có thể thấy hai lỗi có thể xảy ra.

Giả sử máy chủ SQL của bạn nằm trên cùng một hộp như IIS, và cho phép giả sử như ConnectionString của bạn gợi ý, bạn cài đặt SQL server với một trường hợp có tên là "MSSQLLocalDB", chuỗi kết nối của bạn nên là:

Data Source=localhost\MSSQLLocalDB;Initial Catalog=test;IntegratedSecurity=True" 

Nếu LocalDB nằm trên một máy khác, không sử dụng tên máy chủ (trừ khi bạn có máy chủ DNS), chỉ cần sử dụng địa chỉ IP.

Bây giờ, ứng dụng của bạn đang sử dụng APPPOOL \ DefaultAppPool, hãy đảm bảo cấp quyền cho người dùng này để làm bất cứ điều gì bạn định làm trong SQL (ví dụ: nếu thực thi thủ tục đã lưu trữ). Bạn phải thêm điều này làm thông tin đăng nhập và sau đó cấp cho nó quyền EXECUTE, SELECT, INSERT, DELETE vào cơ sở dữ liệu.

Nguồn dữ liệu phải luôn là/

Tôi đề nghị bạn kết nối SSMS và xác nhận tên máy chủ. Tôi sẽ không mong đợi "(" hoặc ")" xuất hiện ở đó. Trừ khi bạn chỉ đơn thuần đề cập đến (LocalDB) của bạn có thể là 192.168.0.1, v.v.

0

Có cùng vấn đề này. Tôi đã không thử tất cả những gì bạn đã làm, mặc dù. Tôi đã làm như sau:

  1. IIS Manager
  2. Application Pools
  3. Tìm hồ bơi ứng dụng của bạn thuộc về (đối với tôi nó là .NET v4.5)
  4. Nhấp chuột phải -> Advanced Settings
  5. Cuộn xuống Identity
  6. Thay đổi từ bất kỳ điều gì (đối với tôi là ApplicationPoolIdentity, giống như bạn có) thành LocalSystem.
0

Trong khi có cách giải quyết bạn có thể thử (chạy SQL Server trong tài khoản của bạn hoặc chia sẻ phiên bản LocalDB và kết nối với nó bằng địa chỉ dùng chung mới tạo), tôi nghĩ giải pháp tốt nhất ở đây là nâng cấp lên SQL Server Express 2012 là những gì tôi đã kết thúc.

lời giải thích chi tiết được trình bày trong blog entry này: https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-2-instance-ownership/

tôi lãng phí gần một ngày vào việc xác định nguyên nhân và cách giải quyết và đi đến kết luận nó có lẽ là đơn giản nhất và bằng chứng nếu tôi nâng cấp phiên bản SQL Server tương lai nhất, vì LocalDB dường như không được thiết kế để hoạt động trong IIS hoặc các môi trường tương tự sau khi đọc blog.

0

Tôi đã có chính xác cùng một vấn đề và cuối cùng tôi đã giải quyết. Hi vọng nó có ích cho bạn. Vấn đề của tôi là tôi đã tạo một ứng dụng web với Visual Studio 2017 và theo mặc định được lưu trữ trên IIS Express. Và tôi đã thay đổi sang IIS sau đó tôi nhận được lỗi này.

Trong Nhật ký sự kiện; Tôi đã thấy 2 lỗi này:

Windows API call SHGetKnownFolderPath returned error code: 5. Windows system error message is: Access is denied. 

Không thể có đường dẫn dữ liệu ứng dụng cục bộ. Có lẽ hầu hết hồ sơ người dùng không được tải. Nếu LocalDB được thực hiện dưới IIS, hãy đảm bảo rằng tải hồ sơ được bật cho người dùng hiện tại.

Đối với tôi, giải pháp là:

Trước tiên tôi đã đính kèm các cơ sở dữ liệu với SQL Server Management Studio với đăng nhập để (LocalDB) \ MSSQLLocalDB mà tôi tìm thấy trong chuỗi kết nối web.config của tôi.

<connectionStrings> 
<add name="EFWeatherDBEntities" 
    connectionString="metadata=res://*/Models.EFModel.csdl|res://*/Models.EFModel.ssdl|res://*/Models.EFModel.msl;provider=System.Data.SqlClient; 
    provider connection string=&quot; 
    data source=(LocalDB)\MSSQLLocalDB; 
    attachdbfilename=|DataDirectory|\WeatherDB.mdf; 
    integrated security=True;connect timeout=30; 
    MultipleActiveResultSets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 
</connectionStrings> 

Sau đó, tôi nhận ra trong IIS khi tôi cố gắng nhấp Test Settings trong Basic Settings, tôi đã nhận được thông báo lỗi Application Đường dẫn không hợp lệ. Vì vậy, tôi đã thay đổi thông tin xác thực thành người dùng khác (người dùng của tôi là quản trị viên nhưng tôi tin rằng không có sự cho phép quản trị viên cũng nên hoạt động).

Vì vậy, về cơ bản:

  • nhấp vào trang web trong IIS

  • nhấp chuột Basic Settings trên bảng bên phải

  • nhấp chuột Connect As

  • và nhập một người dùng trong Specific User phần

  • sau đó kiểm tra xem bạn vẫn gặp lỗi đường dẫn khi nhấp vào Test Settings.

  • Sau đó, trong Application Pool thiết Identity to LocalSystem

Các vấn đề liên quan