我维护一个ASP.NET Web API项目,该项目支持客户端将XML数据发布到我们的服务器的简单REST端点。此站点设置为支持BasicAuthentication并且运行良好。我们所有的安全检查都是在网络防火墙和机器本身使用自定义Windows用户帐户完成的。最近,我们的一个客户要求我们支持SOAP端点来接收XML数据。
我的想法是简单地添加一个新的WebService(Blah.svc),其支持接口具有所需的[ServiceContract]
和[OperationContract]
属性到我的界面。我原本希望我可以简单地将URL暴露给我们的客户端,它会#34;只是工作"。我 am 能够达到终点,但此服务无法提取用户名。
以下是我的示例代码:
public string CreateWorkItem(string xml)
{
var userName = HttpContext.Current.User.Identity.Name;
if (string.IsNullOrEmpty(userName))
userName = "NO USER NAME";
var elem = XElement.Parse(xml);
return $"Hello [{userName}]! You sent [{elem.Value}].";
}
以下是我的结果:
我已经搜索过网络,试图找出如何在Soap消息中访问BasicAuthentication详细信息,但我没有运气。我发现的所有示例都要求我创建一个新的WCF项目并使用大量web.config设置公开它,或者这些示例使用较旧的技术大约5年。
我喜欢这项服务,只需使用Visual Studio中的发布... 选项即可使用我的WebAPI项目进行发布。不幸的是,我还没有找到让它发挥作用的共同点。我确定我错过了一些东西,我希望有人可以提供帮助。
非常感谢任何帮助!
答案 0 :(得分:1)
点击此链接:WCF Services and ASP.NET
简而言之,您需要在WCF服务中启用ASP.NET Compatibility。
但是,您可能希望查看使用OperationContext.Current.ServiceSecurityContext。*
答案 1 :(得分:-1)
HttpContext.Current.User.Identity.Name
返回null
的事实意味着:
null
;或Anonymous
我有一些想法可以帮助您解决问题。
User.Name
实际上是null
您可能希望通过抓取HttpContext.Current.User
进行调试,看看它是否正确。
尝试将HttpContext作为参数传递,以便获取cookie?
public string CreateWorkItem(HttpContext context, string xml)
{
var username = context.Current.User.Identity.Name;
...
}
替代方案是,您的web.config
或Global.asax
可能未正确设置。