应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

winform+wcf(netTcpBinding)双向通讯 自定义用户名密码验证

6210人阅读 2014/1/9 15:30 总访问:5186170 评论:0 收藏:0 手机
分类: WCF


一:创建证书     

       使用vs的命令创建

        makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=TestServer -sky exchange -pe

       创建证书细节http://www.tnblog.net/aojiancc2/article/details/2554   


二:wcf服务器端

接口:

  1. namespace WcfCertificate
  2. {
  3.     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“ITcpCer”。
  4.      [ServiceContract(CallbackContract = typeof(ICallback))]//指定UserCallBack回调接口
  5.     public interface ITcpCer
  6.     {
  7.         [OperationContract]
  8.         void DoWork();
  9.     }
  10.  
  11.     public interface ICallback  //回调接口客服端实现
  12.     {
  13.  
  14.         [OperationContract(IsOneWay = true)]//单向调用,不需要返回值
  15.         void TestCallBack(string hello);
  16.     }
  17. }

实现:

  1. namespace WcfCertificate
  2. {
  3.     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“TcpCer”。
  4.     // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 TcpCer.svc 或 TcpCer.svc.cs,然后开始调试。
  5.     public class TcpCer : ITcpCer
  6.     {
  7.         public void DoWork()
  8.         {
  9.  
  10.             OperationContext.Current.GetCallbackChannel<ICallback>().TestCallBack("回调了");
  11.         }
  12.     }
  13. }

配置文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3.  
  4.   <appSettings>
  5.     <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  6.   </appSettings>
  7.   <system.web>
  8.     <compilation debug="true" targetFramework="4.5" />
  9.     <httpRuntime targetFramework="4.5"/>
  10.   </system.web>
  11.  
  12.   <system.serviceModel>
  13.     
  14.     <behaviors>
  15.       <serviceBehaviors>
  16.         <behavior name="mybehavior">
  17.           <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
  18.           <serviceDebug includeExceptionDetailInFaults="false" />
  19.           <serviceCredentials>
  20.             <clientCertificate>
  21.               <authentication certificateValidationMode="None" />
  22.             </clientCertificate>
  23.             <serviceCertificate findValue="TestServer" storeLocation="LocalMachine"
  24.               storeName="My" x509FindType="FindBySubjectName" />
  25.             <userNameAuthentication userNamePasswordValidationMode="Custom"
  26.               customUserNamePasswordValidatorType="WcfCertificate.Validator,WcfCertificate" />
  27.           </serviceCredentials>
  28.         </behavior>
  29.  
  30.       </serviceBehaviors>
  31.     </behaviors>
  32.  
  33.      <bindings>
  34.  
  35.        <netTcpBinding>
  36.          <binding name="netTcpBindConfig" receiveTimeout="00:20:00">
  37.            <security mode="Message">
  38.              <message clientCredentialType="UserName"  />
  39.            </security>
  40.          </binding>
  41.        </netTcpBinding>
  42.        
  43.     </bindings>
  44.     <services>
  45.  
  46.       <service name="WcfCertificate.TcpCer" behaviorConfiguration="mybehavior">
  47.         <endpoint address="" binding="netTcpBinding"  bindingConfiguration="netTcpBindConfig" contract="WcfCertificate.ITcpCer"/>
  48.         <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
  49.       </service>
  50.     
  51.     </services>
  52.     
  53.     <protocolMapping>
  54.         <add binding="basicHttpsBinding" scheme="https" />
  55.     </protocolMapping>    
  56.     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  57.   </system.serviceModel>
  58.   <system.webServer>
  59.     <modules runAllManagedModulesForAllRequests="true"/>
  60.     <!--
  61.         若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
  62.         在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
  63.       -->
  64.     <directoryBrowse enabled="true"/>
  65.   </system.webServer>
  66.  
  67. </configuration>

三:客服端

  1. namespace wfTcpCer
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.  
  10.         private void button1_Click(object sender, EventArgs e)
  11.         {
  12.  
  13.             ServiceReference1.TcpCerClient tc = new ServiceReference1.TcpCerClient(
  14.                 new System.ServiceModel.InstanceContext(new CallBack()));
  15.             tc.ClientCredentials.UserName.UserName = "sa";
  16.             tc.ClientCredentials.UserName.Password = "1234";
  17.             tc.DoWorkAsync();//有回调函数用异步调用方式
  18.         }
  19.  
  20.         public class CallBack : ServiceReference1.ITcpCerCallback //回调接口
  21.         {
  22.             public void TestCallBack(string hello) 
  23.             {
  24.                 MessageBox.Show("text callback");
  25.             }
  26.         }
  27.     }
  28. }

配置文件:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.     <startup> 
  4.         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  5.     </startup>
  6.     <system.serviceModel>
  7.         <bindings>
  8.             <netTcpBinding>
  9.                 <binding name="NetTcpBinding_ITcpCer">
  10.                     <security mode="Message">
  11.                         <message clientCredentialType="UserName" />
  12.                     </security>
  13.                 </binding>
  14.             </netTcpBinding>
  15.         </bindings>
  16.         <client>
  17.             <endpoint address="net.tcp://2011-20130817ae:4503/TcpCer.svc"
  18.                 binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ITcpCer"
  19.                 contract="ServiceReference1.ITcpCer" name="NetTcpBinding_ITcpCer">
  20.                 <identity>
  21.                     <!--这个是自动生成的,也可以用下边的dns value="TestServer"因为certificateValidationMode="None"不需要验证证书-->
  22.                     <certificate encodedValue="AwAAAAEAAAAUAAAA3j+VKPLILWzCfoG9VXc2yhchi+kgAAAAAQAAADoCAAAwggI2MIIB5KADAgECAhDmLEMHisejr0j4qDS+rn+HMAkGBSsOAwIdBQAwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3kwHhcNMTMxMjMxMDM0MjE4WhcNMzkxMjMxMjM1OTU5WjAVMRMwEQYDVQQDEwpUZXN0U2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtXJzwFZrUgBRsLu5c8wt0iEwj/EcI9IFHK8tAraRtKsLtoWi3CHxrwi39rNaWh0SN11w8QX+0rEwAdxoxppGPPTTMbRMlcUHWHZ8oTn5V66nzYds0X2tt993KV0k1YX1ZXDuA37LZFROwksqCYfsl2sAenVkiLizzjrMVaIUPuzVvaphpxd+KcivPAYdNW/tCgC1vracULEVnu+86uPhyT9dUykIByB4rhbR0EHUNuw/4CtTsx+a3Wqn/vhPgjy08nxx+wfB/ekJmNnoz0cNVobq4WOpExDNZdGrrow9qVMcIvcGj53vGb4BhzdCwZWzf0U/K3LAJEqg+2/P+HlcPwIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwCQYFKw4DAh0FAANBABjcWxmn9cVILyozv4cVvGQJ6ZfAen7pHI1MV1dZ/YhJHd1Ou6dHHafAI3755TyY7gpEHPu4xuRN6eXwYg2FkvI=" />
  23.                     <!--<dns value="TestServer"/>-->
  24.                 </identity>
  25.             </endpoint>
  26.         </client>
  27.  
  28.       <behaviors>
  29.         <endpointBehaviors>
  30.           <behavior name="mye">
  31.             <clientCredentials>
  32.               <serviceCertificate>
  33.                 <!--这里必须要制定为None-->
  34.                 <authentication certificateValidationMode="None"/>
  35.               </serviceCertificate>
  36.             </clientCredentials>
  37.           </behavior>
  38.         </endpointBehaviors>
  39.       </behaviors>
  40.       
  41.     </system.serviceModel>
  42. </configuration>











欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

wcf net.tcp 双向通讯,以及发布iis问题

一:新建wcf服务 UserCallBack.svc[ServiceContract(CallbackContract=typeof(ICallback))]//指定UserCallBack回调接口 pu...

signalr入门双向通讯简单网页聊天

下载依赖:install-package Microsoft.AspNet.SignalR -version 2.0.3服务器启动类:usingMicrosoft.Owin; usingOwin; ...

wcf自定义用户名密码验证

一:创建证书 makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=TestServer -sky exchange -pe二;建立wcf服务 配置文...

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...