我在Visual Studio 2010中有一个基本的WCF服务项目,它由.svc文件,相关的.cs和Web.config组成。我的问题是,当使用WCF测试客户端时,我无法获得用户。 OperationContext.Current.ServiceSecurityContext
为空,HttpContext.Current
为空。我设法在WCF客户端上将安全性设置为Transport,但现在我收到以下错误:
提供的URI方案“http”无效;预期'https'。
我的Web.config如下:
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
我的WCF测试客户端配置如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_MyService">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:57165/MyService.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_MyService" contract="MyService"
name="BasicHttpBinding_MyService" />
</client>
</system.serviceModel>
</configuration>
我对编写新服务完全不熟悉,所以我看到的其他帖子应该回答这个问题,说做事情而不是去哪里做。我在这里寻找清晰简洁的东西。
我在这里缺少什么,或者我是否会让当前用户全部错误?
答案 0 :(得分:3)
WCF客户端抛出“提供的URI方案'http'无效;预期'https'”错误,因为basicHttpBinding
指定security mode="Transport">
但终端地址当前表示非安全协议( endpoint address="http://localhost:57165/MyService.svc"
。更新端点地址以匹配绑定的安全性,以解决通信问题。
解决传输错误后,您可以专注于正确的安全绑定和提取用户信息所需的代码。要获取用户名,您的绑定需要指定用户名的客户端凭据类型。然后,您的服务可以通过System.ServiceModel.ServiceSecurityContext
使用OperationContext
来访问用户信息。
以下链接可能有用:
http://www.codemag.com/article/0611051
http://msdn.microsoft.com/en-us/library/ms731058%28v=vs.110%29.aspx
http://msdn.microsoft.com/en-us/library/system.servicemodel.servicesecuritycontext(v=vs.110).aspx
答案 1 :(得分:2)
为了从wcf webservice中获取Windows凭据,您的绑定必须是wsHttpBinding:
<wsHttpBinding>
<binding name="wsHttpBinding_MyService">
<security mode="TransportCredentialOnly" />
</binding>
</wsHttpBinding>
这是传输凭据的工作安全性的示例。