我编写了一个WCF API。它运行(运行)就好了。 现在,我需要将其打开以进行公开访问,我尝试在the example of Ron Jacobs和the accompanying video on endpoint.tv之后实施API密钥验证
这基本上只使用存储在xml文件中的GUID列表来表示有效的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>
,其中包含xml文件中的有效guid。
解决方案编译,但是当我在我的服务器上发布它并尝试访问那里的服务时,我得到了文件或程序集的FileNotFound异常&#34; WCFWebHttp&#34;或其中一个依赖。
原因很明显,这部分位于web.config的服务行为节点中:
<serviceAuthorization serviceAuthorizationManagerType="WCFWebHttp.APIKeyAuthorization, WCFWebHttp" />
不幸的是,无论是通过我的程序集搜索还是通过我的文件系统搜索,还是通过互联网搜索或nuget软件包搜索都没有找到该名称的程序集。
事件查看器和已启用的跟踪也未显示任何进一步的信息。
这是什么?我该如何解决这个错误?这个例子有什么不对或遗漏的吗?它在视频中运行得很好,这是一个现场演示。 : -
答案 0 :(得分:1)
从这张照片开始:
看起来WCFWebHttp是在您使用的示例的源代码中实现的程序集(我现在无法下载以确保服务器错误)。