2011-12-16 5 views
4

azure 테이블 저장소에 연결하고 개체를 추가하려고합니다. 그것은 그러나 나는 다음과 같은 예외 +의 내부 예외가 사용하는 서버에서, 로컬 호스트에서 잘 작동 :로컬 호스트가 아닌 서버에 배포 할 때 Azure 예외가 발생합니다.

Exception of type 'Microsoft.WindowsAzure.StorageClient.StorageClientException' was thrown. 
System.Data.Services.Client.DataServiceQueryException: An error occurred while processing this request. 
---> System.Data.Services.Client.DataServiceClientException: 
    <?xml version="1.0" encoding="utf-8" standalone="yes"?> 
    <error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <code>AuthenticationFailed</code> 
    <message xml:lang="en-US">Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:17..127 Time:2011-12-16T15:47:50.7505473Z</message> 
    </error> 
    at System.Data.Services.Client.BaseAsyncResult.EndExecute[T](Object source, String method, IAsyncResult asyncResult) 
    at System.Data.Services.Client.QueryResult.EndExecute[TElement](Object source, IAsyncResult asyncResult) 
    --- End of inner exception stack trace --- 
    at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result() 
    at Microsoft.WindowsAzure.StorageClient.CloudTableClient.GetResultOrDefault[T](Task`1 task, T& result) 

내 연결 문자열 : 당신은 역할의에서 데이터 연결 문자열을 변경해야

DefaultEndpointsProtocol=http;AccountName=nameoftable;AccountKey=accountkey... 
+0

서비스 구성을 공유하십시오. dev 저장소 자격 증명 대신 서버 creds를 전달합니까? – SliverNinja

답변

15

이 조금 있습니다 하지만 장거리 서버는 사이트가 호스팅되는 서버의 시계를 확인하십시오. 모든 Azure 저장소 REST 호출에 대한 authentication header의 일부는 현재 UTC입니다. Azure 서버가 말하는 것과 너무 멀면 UTC 시간입니다. 오류가 발생합니다.

+2

놀랍게도! 이것은 문제 & 해결책이었다! – Guy

0

설정. 나는 당신이 스토리지 계정 키를 잘못 읽었거나 기본 연결 문자열 "UseDevelopmentStorage = true"를 남겨 두었습니다.

Azure 스토리지에 적용되는 방화벽 규칙은 액세스 할 수있는 계정이 아닙니다. 아직 저장하지 않은 경우 저장소를 만들어야합니다. 트래픽 비용을 피하기 위해 호스팅 서비스와 동일한 데이터 센터에 스토리지를 생성하는 것이 좋습니다. 그런 다음 포털에 제공된 스토리지 계정과 키를 사용하십시오.

enter image description here

전형적인 진짜 푸른 저장소 계정 연결 문자열은 다음과 같이 보일 것입니다 :

DefaultEndpointsProtocol = HTTPS, 계정 이름 = YOUR_ACCOUNT_NAME; AccountKey = YOUR_ACCOUNT_KEY_BE_IT_PRIMARY_OR_SECONDARY ==

+0

이미 저장 용량이 있습니다. localhost (여전히 온라인 저장소에 액세스)를 통해 액세스 할 때 제대로 작동합니다. 내가 서버에서 액세스하려고 할 때 나는 예외를 얻었습니다. – Guy

+0

내 연결 문자열이 정확히 그 것처럼 보입니다. 또한 https 사용 여부에 관계없이 시도했습니다 – Guy

+0

클라우드 구성에이 연결 문자열이 있습니까? 두 개의 .cscfg 파일 -> YourProjectName.Cloud.cscfg 및 YourProject.Local.cscfg가 있습니다. 로컬에서 시도하고 있다고 가정하면 로컬 설정 (기본값)으로 시도하고 있습니까? 그러나 배포 할 때 .Cloud.cscg (기본적으로 사용됨)에는 여전히 "usedevelopmentstorage = true"가있을 수 있습니다. 개발자 포털에서 실제 구성을 확인할 수 있습니다. 배포 된 호스팅 서비스를 선택하고 리본에서 "구성"아이콘을 클릭하십시오. 구성 파일이있는 창을 팝업합니다. 연결 문자열을 두 번 확인하십시오. – astaykov

관련 문제