“看起来容易”的任务不能由我自己完成。我有一个WCF服务,应该受用户名和密码凭证保护,并保持会话模式。
所以,这是激活函数接口的一部分。
<ServiceContract(SessionMode:=SessionMode.Required, ProtectionLevel:= ProtectionLevel.EncryptAndSign)>
Public Interface ServiceS
<OperationContract()>
Function Activation(A As String) As String
End Interface
背景课
Public Class Service1
Implements ServiceS
Function Activation(A As String) As String Implement ServiceS.Activation
Return "Hello, " & A & "!"
End Function
End Class
接下来是web.config。
<services>
<service name="MyServiceS.Service1" behaviorConfiguration="MyBehavior">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="MyServiceS.ServiceS" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="MyBinding" useDefaultWebProxy="false">
<security mode="Message" />
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add scheme="https" binding="wsHttpBinding"/>
<add scheme="http" binding="wsHttpBinding"/>
</protocolMapping>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
客户端代码。
Dim wcfTest As New MyService.ServiceSClient
wcfTest.ClientCredentials.Windows.ClientCredential.UserName = "Name"
wcfTest.ClientCredentials.Windows.ClientCredential.Password = "Password"
Dim Reply as String = wcfTest.Activation("Alex")
我期待什么?我需要我的WPF应用程序连接到我的服务并传递用户名和密码。如果它们是正确的,用户可以访问激活功能,如果没有 - 会话应该关闭。所以,我通过登录和密码服务,但不知道如何检查。它应该是接口或背景类的一部分吗?
我在互联网上看到了大量的例子,但大多数都是关于其他事情的。
如果你知道如何只通过wsHttpBinding只检查用户名和密码来保持会话,只有WCF只有4.0,请提供建议。或者说,如果是这样的话,为什么不可能。多克斯很多!
答案 0 :(得分:0)
您应该首先将客户端凭据类型设置为UserName,如下所示。
<wsHttpBinding>
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
然后,您可以实现自定义用户名&amp;密码验证器,如this文章和实施身份验证。