winform+wcf(netTcpBinding)双向通讯 自定义用户名密码验证
来源:互联网 发布:excel数据挖掘插件 编辑:程序博客网 时间:2024/06/05 18:35
一:创建证书
使用vs的命令创建
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=TestServer -sky exchange -pe
创建证书细节http://blog.csdn.net/aojiancc2/article/details/17711925
二:wcf服务器端
namespace WcfCertificate{ // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“ITcpCer”。 [ServiceContract(CallbackContract = typeof(ICallback))]//指定UserCallBack回调接口 public interface ITcpCer { [OperationContract] void DoWork(); } public interface ICallback //回调接口客服端实现 { [OperationContract(IsOneWay = true)]//单向调用,不需要返回值 void TestCallBack(string hello); }}
namespace WcfCertificate{ // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“TcpCer”。 // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 TcpCer.svc 或 TcpCer.svc.cs,然后开始调试。 public class TcpCer : ITcpCer { public void DoWork() { OperationContext.Current.GetCallbackChannel<ICallback>().TestCallBack("回调了"); } }}
配置文件
<?xml version="1.0" encoding="utf-8"?><configuration> <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5"/> </system.web> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="mybehavior"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> <serviceCredentials> <clientCertificate> <authentication certificateValidationMode="None" /> </clientCertificate> <serviceCertificate findValue="TestServer" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" /> <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WcfCertificate.Validator,WcfCertificate" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name="netTcpBindConfig" receiveTimeout="00:20:00"> <security mode="Message"> <message clientCredentialType="UserName" /> </security> </binding> </netTcpBinding> </bindings> <services> <service name="WcfCertificate.TcpCer" behaviorConfiguration="mybehavior"> <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTcpBindConfig" contract="WcfCertificate.ITcpCer"/> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> </service> </services> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <!-- 若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。 在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。 --> <directoryBrowse enabled="true"/> </system.webServer></configuration>
三:客服端
namespace wfTcpCer{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ServiceReference1.TcpCerClient tc = new ServiceReference1.TcpCerClient( new System.ServiceModel.InstanceContext(new CallBack())); tc.ClientCredentials.UserName.UserName = "sa"; tc.ClientCredentials.UserName.Password = "1234"; tc.DoWorkAsync();//有回调函数用异步调用方式 } public class CallBack : ServiceReference1.ITcpCerCallback //回调接口 { public void TestCallBack(string hello) { MessageBox.Show("text callback"); } } }}配置文件
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <system.serviceModel> <bindings> <netTcpBinding> <binding name="NetTcpBinding_ITcpCer"> <security mode="Message"> <message clientCredentialType="UserName" /> </security> </binding> </netTcpBinding> </bindings> <client> <endpoint address="net.tcp://2011-20130817ae:4503/TcpCer.svc" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ITcpCer" contract="ServiceReference1.ITcpCer" name="NetTcpBinding_ITcpCer"> <identity> <!--这个是自动生成的,也可以用下边的dns value="TestServer"因为certificateValidationMode="None"不需要验证证书--> <certificate encodedValue="AwAAAAEAAAAUAAAA3j+VKPLILWzCfoG9VXc2yhchi+kgAAAAAQAAADoCAAAwggI2MIIB5KADAgECAhDmLEMHisejr0j4qDS+rn+HMAkGBSsOAwIdBQAwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3kwHhcNMTMxMjMxMDM0MjE4WhcNMzkxMjMxMjM1OTU5WjAVMRMwEQYDVQQDEwpUZXN0U2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtXJzwFZrUgBRsLu5c8wt0iEwj/EcI9IFHK8tAraRtKsLtoWi3CHxrwi39rNaWh0SN11w8QX+0rEwAdxoxppGPPTTMbRMlcUHWHZ8oTn5V66nzYds0X2tt993KV0k1YX1ZXDuA37LZFROwksqCYfsl2sAenVkiLizzjrMVaIUPuzVvaphpxd+KcivPAYdNW/tCgC1vracULEVnu+86uPhyT9dUykIByB4rhbR0EHUNuw/4CtTsx+a3Wqn/vhPgjy08nxx+wfB/ekJmNnoz0cNVobq4WOpExDNZdGrrow9qVMcIvcGj53vGb4BhzdCwZWzf0U/K3LAJEqg+2/P+HlcPwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBABjcWxmn9cVILyozv4cVvGQJ6ZfAen7pHI1MV1dZ/YhJHd1Ou6dHHafAI3755TyY7gpEHPu4xuRN6eXwYg2FkvI=" /> <!--<dns value="TestServer"/>--> </identity> </endpoint> </client> <behaviors> <endpointBehaviors> <behavior name="mye"> <clientCredentials> <serviceCertificate> <!--这里必须要制定为None--> <authentication certificateValidationMode="None"/> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> </system.serviceModel></configuration>
0 0
- winform+wcf(netTcpBinding)双向通讯 自定义用户名密码验证
- wcf自定义用户名密码验证
- Wcf 安全性之 自定义用户名密码验证
- siverlight+wcf(basicHttpBinding)自定义用户名密码验证
- WCF中使用自定义“用户名/密码”验证
- wcf 用户名密码验证和证书验证
- VS2010 WCF用户名密码X.509验证
- 自定义拦截器,验证用户名密码
- wcf net.tcp 双向通讯
- WCF通讯方式之双向通讯
- WCF中netTcpBinding使用
- WCF的用户名密码认证
- WCF用户名密码验证——获取准确的用户验证失败异常信息
- hive配置mysql连接,配置java连接用户名密码,配置自定义类验证用户名密码
- 验证用户名和密码
- 用户名密码验证程序
- 用户名和密码验证
- JS验证用户名密码
- 简单的实现一个自定义的Linq to Sql Provider
- myeclipse启动An internal error occurred during: "Initializing Java Tooling".
- 多线程
- 零基础写嵌入式操作系统-2
- ASIHTTPRequest 详解, ios http网络请求
- winform+wcf(netTcpBinding)双向通讯 自定义用户名密码验证
- PHP中的 抽象类(abstract class)和 接口(interface)
- extjs2.0 xtype属性
- Raspberry Pi Airplay Tutorial
- webx—CommandDispatcher分发服务
- 根据IP地址获取所在城市信息
- IOS4的多任务机制概述
- 面向对象(继承-抽象-接口)
- android ApplicationInfo类