这是question的后续内容。我试图避免使用x509证书方法,因为这使我的客户端安装更复杂。如果basicHttpBinding不是唯一的选项,那么其他绑定方法的一些示例。
我的客户端使用.Net 2.0,我无法访问System.ServiceModel命名空间,因为直到3.0才出现。
更新:要清楚, 客户:.Net 2.0, 网络服务:.net3.5 / WCF
答案 0 :(得分:3)
问题不在于.Net 2.0服务和WCF以及各种绑定之间的不匹配 - 它们(有一些值得注意的例外,在你的情况下不应该是一个问题)非常兼容的协议。
WSE 3.0(在2.0 .Net框架上运行)特别接近。你可以使用basicHttpBinding或wsHttpBinding和一些调整。 'Jimmy'Skowronski的文章here和MSDN文章here涵盖了大部分基础知识。
您还可以编写一个自定义绑定代码,以便让您支持WSE和WCF之间的一些不兼容性(就像使用WCF和基本身份验证时安全传输的要求一样)
我理解的问题是如何管理身份验证 - 在上一个问题中,您排除了Windows身份验证。 Kerberos在WCF或WSE中都可以工作,但这更复杂。
除非您深入研究自己的身份验证方案,否则您(据我所知)仅限于使用基本身份验证(因此每个客户端都会提供用户名或密码,根据您的需要,这可能对所有客户端都相同)或证书认证。
Toran的回答是使用基本身份验证的良好启动。
我认为可能一个好的方法是首先查看.Net 2.0(和WSE *)方面的要求 - 建立适合您的客户端部署的认证机制,然后确定如何接受该认证与WCF。
WCF几乎可以接受WSE 3.0可以发送的任何内容(除了我能想到的唯一例外是寻址规范的版本,以及一些稍微严格的安全要求)
答案 1 :(得分:1)
您可以使用basicHttp。
来要求SSL +用户名/密码首先,以下是您的客户端将在.NET 2.0中使用您的WCF服务进行身份验证的内容。
Dim client As WebServiceClient = New WebServiceClient("basicHttpWebService")
client.ClientCredentials.UserName.UserName = "username"
client.ClientCredentials.UserName.Password = "password"
接下来,您的WCF服务的示例配置需要SSL +成员资格提供程序凭据
<bindings>
<basicHttpBinding>
<binding name="basicHttp">
<security mode="TransportWithMessageCredential">
<transport/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="NorthwindBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
我唯一不确定的是,要使用客户端应用程序中的第一部分,您可能需要安装WCF / WPF扩展CTP,因为我通常右键单击并“添加服务引用”而不是ASMX“添加web引用“ - 如果是这样,VS2005的这个扩展确实需要安装.NET 3.0。但是通过简单的“添加网络参考”你仍然可以输入用户名/密码...我只是不知道这个vb / c#会是什么样的......