Я написал API WCF. Он работает (работает) просто отлично. Теперь, когда мне нужно, чтобы открыть его для всеобщего доступа, я пытался реализовать ключ проверки API следующие the example of Ron Jacobs и the accompanying video on endpoint.tvWCF Service FileNotFound exception после реализации авторизации ключа
Это в основном просто использует список GUIDs, хранящийся в файле XML, которые представляют действительные ключи API. Запрос ключ авторизации передается через строку запроса и проверен в пользовательском ServiceAuthorizationManager так:
protected override bool CheckAccessCore(OperationContext operationContext)
{
return IsValidAPIKey(operationContext);
}
public static bool IsValidAPIKey(OperationContext operationContext)
{
string key = TvinQuery.GetAPIKey(operationContext);
Guid apiKey;
// Convert the string into a Guid and validate it
if (Guid.TryParse(key, out apiKey) && TvinQuery.APIKeys.Contains(apiKey))
{
return true;
}
else
{
return false;
}
}
TvinQuery.APIKeys
простого List<string>
, содержащий действительные GUIDs из файла XML.
Решение компилируется, но когда я публикую его на своем сервере и пытаюсь получить доступ к службе там, я получаю исключение FileNotFound для файла или сборки «WCFWebHttp» или одну из его зависимостей.
Причиной этого является то, очень очевидно, эта часть в поведении службы узла web.config:
<serviceAuthorization serviceAuthorizationManagerType="WCFWebHttp.APIKeyAuthorization, WCFWebHttp" />
К сожалению, ни поиск в моих сборках, ни в моей файловой системе, ни поиска, ни Интернет в NuGet пакетный поиск придумал сборку этого имени.
Средство просмотра событий и активированная трассировка также не отображали никакой дополнительной информации.
Что это? Как я могу решить эту ошибку? Есть ли что-то неправильно или отсутствует на примере? В видео он отлично работал, и это была живая презентация. : -?
Я такой идиот. Да, это просто имя его проекта и имя APIKeyAuthorization - его собственный класс ServiceAuthorizationManager. * Стыд *. Все, что мне нужно было сделать, это изменить его на 'в соответствии с моим именем и классом проекта и деактивировать' aspNetCompatibilityEnabled' для меня. Работает сейчас. Благодаря! –
LocEngineer