ServiceStack에서 개발 된 API에서 검색 기능을 구현하기로 결정했습니다. Lucene.Net을 사용하기로 결정한 것은 검색을 위해 훌륭한 인덱서라고 들었 기 때문입니다.Lucene.Net을 사용하여 Azure Storage 폴더에 액세스 할 수 없음
우리는 Azure Storage 폴더에 색인을 생성하는 작업자 역할을 만들었으며 우리는 Leon Cullen's tutorial을 사용하여 지침을 작성했습니다. 우리는 해당 게시물에 지정된 을 사용하므로 최신 Azure SDK를 사용할 수 있습니다.
그런 다음 우리의 API 프로젝트에서 우리는 Lucene.Net 및 AzureDirectory에 대한 참조를 추가하는 것은 너무 우리의 엔드 포인트는 다음과 같이 찾고 결국 우리가 로컬이를 실행하면 예상대로public object Post(SearchIndex request)
{
List<Product> products = new List<Product>();
var pageSize = -1;
var totalpages = -1;
int.TryParse(ConfigurationManager.AppSettings["PageSize"], out pageSize);
if (request.Page.Equals(0))
{
request.Page = 1;
}
// Get Azure settings
AzureDirectory azureDirectory ;
try
{
// This is the line where we get the Access denied exception thrown at us
azureDirectory = new AzureDirectory(Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(ConfigurationManager.AppSettings["ConnectionStringAzureSearch"]), "indexsearch");
IndexSearcher searcher;
using (new AutoStopWatch("Creating searcher"))
{
searcher = new IndexSearcher(azureDirectory);
}
using (new AutoStopWatch(string.Format("Search for {0}", request.SearchString)))
{
string[] searchfields = new string[] { "Id", "Name", "Description" };
var hits = searcher.Search(QueryMaker(request.SearchString, searchfields), request.Page * pageSize);
int count = hits.ScoreDocs.Count();
float temp_totalpages = 0;
temp_totalpages = (float)hits.ScoreDocs.Count()/(float)pageSize;
if (temp_totalpages > (int)temp_totalpages)
{
totalpages = (int)temp_totalpages + 1;
}
else
{
totalpages = (int)temp_totalpages;
}
foreach (ScoreDoc match in hits.ScoreDocs)
{
Document doc = searcher.Doc(match.Doc);
int producId = int.Parse(doc.Get("Id"));
Product product = Db.Select<Product>("Id={0}", producId).FirstOrDefault();
products.Add(product);
}
}
return new SearchIndexResult { result = products.Skip((int)((request.Page - 1) * 10)).Take(pageSize).ToList(), PageSize = pageSize, TotalPages = totalpages };
}
catch (Exception e)
{
return new HttpResult(HttpStatusCode.NoContent, "azureDirectory. Parameter: " + request.SearchString + ". e: " + e.Message);
}
}
그것은 우리에게 결과를 반환 작품 우리는 기대하고 있었다. 그러나 Azure에 API를 게시하고 검색 끝점에 액세스하려고 시도했을 때 '경로에 대한 액세스'D :/AzureDirectory 메시지가 거부 된 403 오류 메시지가 수신되었습니다.
왜 그런 폴더에 접근하려고 시도하고 있는데, 폴더의 이름이 잘못되어 로컬 경로에 액세스하려고 시도하는 것 같아요. 왜 로컬에서는 제대로 작동합니까?하지만 일단 Azure에 배포되면 작동을 멈 춥니 다.
작업자 역할은 문제없이 실행되지만 Azure 저장소의 폴더에 액세스 할 수없는 API 측이 있습니다. 구성에 중요한 단계가 빠졌습니까? 다음 지침은 사용하는 초보자에게 분명하지 않습니다. Lucene.Net 또는 Azure Storage를 사용하면 중요한 단계를 놓쳤을 수도 있습니다. 우리 연결 문자열을 cked 모든 게 괜찮아 보인다.
결론에 도달 했습니까? 임씨는 비슷한 종류의 문제가 있습니다. 내 클라우드 서비스에서 색인을 생성 할 수 있으며 내 웹 API를 로컬에서 실행할 때 예상대로 읽을 수는 있지만 하늘색 웹 사이트에서 실행하면 문제가 발생합니다.것은 일하는 데 사용되는 것이므로 일부 업데이 트와 관련이 있다고 생각합니다. –