2013-02-03 44 views
10

Gần đây tôi đã thiết lập trang web đầu tiên của mình trên Azure. Bây giờ, về cơ bản nó chỉ là trang web mẫu chuẩn MVC4 với bộ điều khiển Trang chủ và Tài khoản. Trong Azure, tôi có một trang web và một cơ sở dữ liệu SQL. Tôi có thể truy cập cơ sở dữ liệu SQL Azure từ SSMS, và đã thiết lập đăng nhập và người dùng được sử dụng bởi trang web của tôi.Không thể truy cập SQL Azure DB từ trang web Azure mặc dù cùng một chuỗi kết nối hoạt động từ trang web địa phương

Trong môi trường phát triển của tôi, chỉ vào cơ sở dữ liệu phát triển của tôi, tôi có thể truy cập vào trang/Tài khoản/Đăng nhập tốt. Tôi có thể đăng ký và tôi có thể thấy người dùng mới trong db cục bộ của mình. Tôi cũng có thể thay đổi chuỗi kết nối để trỏ trang web phát triển của tôi tại SQL Azure DB của tôi, và một lần nữa tôi có thể truy cập/Tài khoản/Đăng nhập và đăng ký người dùng mới. Sau đó tôi có thể thấy những người dùng mới trong SQL Azure DB.

Sự cố xảy ra khi tôi triển khai trang web tới Azure. Tôi có một cấu hình biến đổi liên kết với tập tin publishsettings của tôi, và tôi có thể thấy trong cửa sổ đầu ra khi xuất bản các trang web để Azure mà biến đổi này được áp dụng trong quá trình triển khai. Điều này sửa đổi chuỗi kết nối DB phát triển cục bộ thành chuỗi kết nối SQL Azure. Tôi cũng đã xác minh rằng chuỗi kết nối SQL Azure này nằm trong tệp web.config thực tế được triển khai (sử dụng FileZilla FTP để truy xuất web.config thực tế được triển khai). Tôi có thể truy cập vào trang chủ của trang web của tôi trên [mysite] .AzureWebsites.net, nhưng khi tôi nhấp vào liên kết đăng nhập để đi đến trang/tài khoản/Đăng nhập, tôi nhận được lỗi sau:

[ArgumentException: Format of the initialization string does not conform to specification starting at index 0.] 
System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) +5313265 
System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) +124 
System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) +95 
System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +59 
System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) +24 
System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) +167 
System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) +61 
System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) +66 

System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection) +122 
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +32 
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +127 
System.Data.Entity.Internal.LazyInternalConnection.get_ProviderName() +13 
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +346 
System.Data.Entity.Internal.InternalContext.CreateObjectContextForDdlOps() +17 
System.Data.Entity.Database.Exists() +36 
[MyWebsite].Filters.SimpleMembershipInitializer..ctor() +105 

Điều này có vẻ để đề xuất rằng có một vấn đề với chuỗi kết nối của tôi, nhưng như tôi đã đề cập trước đó, chuỗi kết nối chính xác này đã hoạt động từ trang web địa phương của tôi.

Tôi đã xem vấn đề có thể liên quan đến tường lửa, nhưng tôi đã kiểm tra cài đặt trong cổng quản lý Azure và quy tắc tường lửa Windows Azure Services được áp dụng để cho phép truy cập đó. Ngoài ra, tôi đã cố gắng loại bỏ các quy tắc tường lửa cho máy địa phương của tôi để truy cập SQL Azure DB, để xem tôi sẽ nhận được một ngoại lệ tương tự, nhưng ngoại lệ ném là rất rõ ràng liên quan đến tường lửa.

Tôi cũng đã cố gắng thêm chuỗi kết nối SQL Azure thông qua cổng quản lý Azure (mặc dù tôi không thấy cách chỉ định nhà cung cấp) - không cần phải nói, tôi có cùng "Định dạng khởi tạo ... "ngoại lệ được đề cập ở trên.

chuỗi kết nối của tôi trong web.config là theo định dạng sau:

<add name="[my connection name]" 
    connectionString="Server=tcp:abc123.database.windows.net,1433;Database=[my database];User ID=[my login]@abc123;Password=[my password];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" 
    providerName="System.Data.SqlClient" /> 

Bất kỳ gợi ý sẽ rất hoan nghênh.

Trả lời

7

Tôi đã CUỐI CÙNG cuối cùng. Những gì tôi đã không nhận ra cho đến bây giờ là có 2 chuỗi kết nối trong web.config mà cuối cùng được triển khai vào trang web Windows Azure - tùy chỉnh của riêng tôi, nhưng một chuỗi kết nối DefaultConnection là tốt, có định dạng:

<add name="DefaultConnection" connectionString="DefaultConnection_ConnectionString" providerName="System.Data.SqlClient" /> 
  • rõ ràng, không phải là chuỗi kết nối hợp lệ (và do đó ngoại lệ định dạng ở trên). Bạn có thể thấy điều này khi bạn tải xuống web.config thực tế từ trang web Azure của bạn bằng FTP.

Chuỗi kết nối mặc định này không có ở bất kỳ đâu trong web.configs hoặc các biến đổi khác nhau trong giải pháp của tôi. Nhìn vào cửa sổ Output trong khi xuất bản, có một số biến đổi được áp dụng cho web.config. Tôi đã đi qua các phiên bản khác nhau của các tập tin được tạo ra trong chu kỳ xây dựng/xuất bản, và không ai trong số họ có chuỗi kết nối DefaultConnection trong họ, thậm chí không trong thư mục obj \ Release \ Package \ PackageTmp \. Vì vậy, tôi đoán một cái gì đó trong giai đoạn Web Deploy là chèn nó như là sửa đổi cuối cùng của web.config. Có một phần tử MSDeployParameterValue trong tệp publishsettings đề cập đến các chuỗi kết nối và web.config - tôi đoán nó có thể là vậy.

Trong tập tin AccountModels.cs, một tài liệu tham khảo được thực hiện để DefaultConnection này:

public UsersContext() 
: base("DefaultConnection") 
{ 
} 

Đây là cách chuỗi kết nối cụ thể được chọn. Thay đổi thông số này thành tên chuỗi kết nối tùy chỉnh của bạn đảm bảo rằng cơ sở dữ liệu tùy chỉnh của bạn được sử dụng cho các công cụ tài khoản khác nhau và giải quyết ngoại lệ định dạng được thấy ở trên.

+0

Rất thích thú khi bắt đầu xây dựng UsersContext. –

+0

Bạn có đang sử dụng cập nhật cơ sở dữ liệu web triển khai không? Có một hộp kiểm cho dù bạn muốn thêm chuỗi kết nối vào dự án. – kvetis

-1

Thử xóa "Mã hóa = True;" hoặc thử thêm "TrustServerCertificate = True;" - Đọc SqlConnection.ConnectionString Property để biết thêm chi tiết, nhưng về cơ bản:

Beginning in .NET Framework 4.5, when TrustServerCertificate is false (the default) and Encrypt is true, the server name (or IP address) in a SQL Server SSL certificate must exactly match the server name (or IP address) specified in the connection string.

+0

Đáng buồn thay, cả hai tùy chọn này đều không hoạt động, viperguynaz. Nhưng tôi có thể thấy ngay bây giờ cách chuỗi kết nối giống nhau có thể hoạt động cục bộ nhưng không phải từ trang web được lưu trữ trên Azure. Tôi sẽ có một đọc thông qua các liên kết bạn đăng mặc dù để xem nếu có bất cứ điều gì khác tôi có thể thử. Cảm ơn bạn đã giúp đỡ! –

0

Giới thiệu về chuỗi kết nối của SQL Azure

  • Dịch vụ Cơ sở dữ liệu SQL Azure là chỉ có sẵn với cổng TCP 1433. Đảm bảo rằng tường lửa của bạn cho phép giao tiếp TCP gửi đi trên cổng TCP 1433.

  • SQL Azure không hỗ trợ Xác thực Windows. Kết nối tin cậy sẽ luôn được đặt thành Sai.

  • SQL Azure không hỗ trợ các kết nối không được mã hóa. Bạn cần phải xác định trong chuỗi kết nối mà bạn muốn mã hóa kết nối.

  • Kết nối với SQL Azure bằng cách sử dụng OLE DB không được hỗ trợ chính thức.

cách chuẩn

Server=tcp:[serverName].database.windows.net;Database=myDataBase; 
User ID=[LoginForDb]@[serverName];Password=myPassword;Trusted_Connection=False;Encrypt=True; 

Use '[email protected]' for the User ID parameter.

Để biết thêm thông tin kiểm tra này ra Connection strings for SQL Azure

Tôi hy vọng điều này sẽ giúp cho bạn.

+0

Cảm ơn bạn đã trả lời, Sampath, nhưng tôi nghĩ chuỗi kết nối tôi đã đăng ở trên phù hợp với tất cả các tiêu chí này. Ngoài ra, cùng một chuỗi kết nối hoạt động tốt khi được sử dụng từ cơ sở dữ liệu cục bộ của tôi, điều này gợi ý rằng không có gì sai với chuỗi kết nối. Ngoài ra, khi tôi kết nối với cơ sở dữ liệu SQL Azure từ một trang web được lưu trữ trên Azure, tôi không có quyền kiểm soát các cổng trong quy tắc tường lửa - đây không phải là tùy chọn trong Cổng quản lý Windows Azure - không phải là tùy chọn mà tôi có thể xem . Tôi sẽ có một cái nhìn tại liên kết bạn đăng mặc dù. Cảm ơn Sampath! –

1

Tôi biết đây là một bài đăng cũ, nhưng tôi muốn chia sẻ những phát hiện của mình. Trong tệp .pubxml của tôi, nó đã lưu chuỗi kết nối localdb của tôi và sẽ không cập nhật trên bất kỳ bản dựng hoặc xuất bản nào. Tôi đã phải tự cập nhật các tập tin xuất bản với các chuỗi kết nối DB của tôi để nó hoạt động. Hy vọng điều này sẽ giúp tiết kiệm thời gian.

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