精华内容
下载资源
问答
  • C# WCF项目示例

    2018-02-23 15:54:44
    WCF示例项目,c#...................................................................................................................................
  • 1.服务端程序选择WCF,客户端程序选择WPF。2.客户端与服务端连接成功后,通过服务端获取已在线的用户,并将其显示在客户端的在线用户栏。3.不论哪个用户发送聊天消息,其他所有用户都能看到该消息。4.当某个用户推出...
  • 自己项目中开发的服务器接口案例。增删改查基础案例。
  • 在同一个方案中,分别编写服务端程序和客户端程序,利用http和流传输实现文件下载功能。1.服务端选择WCF服务应用程序模板,客户端程序选择WPF应用程序模板。
  • C#WCF实例,服务器与客户端程序
  • 在这个例子中我们将使用VS2010创建一个WCF服务,其中会了解[DataContract][ServiceContract]等特性。 内置的WCFSVCHost,并使用“WCF测试客户端”来测试我们创建的服务。 注意下面的所有类、接口及方法都添加了...
  • C# WCF中间件

    2018-12-25 14:50:28
    WCF中间件是用结合netTcpBinding 并以windows 服务的方式向winForm 或WebFrom客户端提供调用。
  • C#WCF服务编程 教程

    2018-05-01 15:43:15
    C# Windows API 编程,Visual C#的Windows API 程序设计
  • C# WCF 使用例程

    2019-01-09 12:06:22
    本实例创建了一个C#WCF服务,通过多方找资料和不断尝试,终于实现了通过浏览器http访问方法
  • C# WCF架构创建过程 (C/S),c# winform .Net 架构 编程
  • C# WCF 推送数据SOCKE;T并发完成端口例子完整实例源码; C# SOCKET WCF PUSH 推送数据
  • C# WCF开发实例代码

    2016-04-23 09:23:00
    一个C#实现的异常记录捕获工程,包含服务端所有源码
  • C# WCF 聊天

    2015-01-07 15:44:01
    国外牛人做的WCF聊天程序,高效实时,学习C#的同学你值得拥有.做WCF的可以学习.
  • C# WCF学习简单总结

    2019-03-06 15:52:59
    WCF 学习简单总结 定义:面向服务的分布式编程框架。统一COM和.Net Remoting提供通用,可靠的分布式编程模型。 具有ABC这三个特性。 A->Address 地址 地址包含服务位置和传输协议(传输样式)这两个元素。 ...

    WCF 学习简单总结

    定义:面向服务的分布式编程框架。统一COM和.Net Remoting提供通用,可靠的分布式编程模型。

    具有ABC这三个特性。

    A->Address  地址

    地址包含服务位置和传输协议(传输样式)这两个元素。

    •  基于http协议
    •  基于tcp协议
    • 基于进程间通信
    • 基于消息队列通信

    当然还有包括https和服务总线的协议模型。

    B->Binding   绑定

    绑定定义了服务间通信的基本方式。常用绑定如下:

    1. 基本绑定
    2. Web服务绑定提供基于internet的通信。
    3. TCP绑定使用TCP协议实现了跨机器的通信。
    4. IPC绑定使用命名管道在进程间通信。
    5. MSMQ绑定使用消息队列通信

    C->Contract  契约

    契约是描述服务功能的标准方式。

    • 服务契约 描述可用服务操作
    • 数据契约  定义与交互的数据类型
    • 错误契约  定义抛出的错误操作
    • 消息契约 允许服务于消息交互

    EndPoint  终结点

    终结点组装ABC暴露给调用服务的客户端。

    终结点的可以通过配置和编码。

    WCF服务必须托管的宿主进程中,自托管,IIS发布

    Mex 元数据:WCF服务元数据是ABC的原始描述信息。

    元数据基于XML,自描述。客户端根据元数据反序列化生成本地代码。

     

    优势:

    1,统一性

    由多种技术的整合,仍然是面向对象代码编写,采用托管代码编写方式。

    2,互操作性

    它采用SOAP通讯机制,保证了系统之间的互操作性,可以跨进程、跨机制。甚至跨平台通信,只要他支持web Service。

    3,安全与可靠性

    因为它包含多种协议,故有多种协议的安全机制,尤其是SOAP的。

    4,兼容性

    它可以在新旧平台上使用。

    缺点

    1 需要更多底层资源

     

    简单使用:

     服务端

    1.  ServiceContract提供服务
    2. OperationContract 提供操作
    3.  DataContract提供数据

     客户端调用

    1. 使用vs添加服务引用
    2. ServiceHost创建宿主 
    3. 加载元数据结点 ServiceMetadataBehavior 
    4. 加载结点NetTcpBinding,selfHost.AddServiceEndpoint

     

    题目

    WCF和ASMX WebService的区别是什么?

    都基于HTTP的SOAP通讯。但WCF能使用任意协议和格式(默认SOAP)。

     

    怎么理解WCF的Service EndPoints?

    Address:标识了服务地址和协议;

    Binding:通信方式

    Contract:描述的服务功能,

     

    4.    怎样在WCF Service中启用操作重载(Operation Overloading )?

    重载通过OperationContract的Name属性实现

    private void StartAPPWCFService()
            {
               
                string serviceAddress = string.Format("net.tcp://{0}:{1}/", "localhost", CommonData.Configuration.Port);
    
                Dictionary<Type, Type> sevtypes = new Dictionary<Type, Type>();
               sevtypes.Add(typeof(IPersonService), typeof(PersonService));
               sevtypes.Add(typeof(ISafetyService), typeof(SafetyService));
                sevtypes.Add(typeof(IPressureService), typeof(PressureService));
               
                string endpointAddress = string.Empty;
                string tName = string.Empty;
                foreach (var item in sevtypes)
                {
                    tName = item.Value.Name;
                    endpointAddress = serviceAddress + tName;
                    ServiceHost serviceHost = new ServiceHost(item.Value, new Uri(endpointAddress));
                    //加载元数据结点
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    serviceHost.Description.Behaviors.Add(smb);
                    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
                    //加载NetTcpBinding结点
                    NetTcpBinding netTcpBinding = SetTCPBinding();
                    serviceHost.AddServiceEndpoint(item.Key, netTcpBinding, endpointAddress);
                    serviceHost.Open();
                    listServiceHost.Add(serviceHost);
                }
            }
    
    服务器端

     WCF系列 基础概念https://www.cnblogs.com/qyzBlog/p/4205574.html

    面试题:http://www.cnblogs.com/superstar/archive/2013/01/17/2864629.html

    展开全文
  • C# 局域网通信WCF

    2019-03-27 21:37:12
    C#开发的一款适用于局域网环境下的网络聊天通信程序。提供了客户端和服务端。同一个服务中的所有客户可相互聊天。
  • C# WCF 多服务接口开发

    2020-09-18 11:22:57
    LogFactory.Log.Info("WCF 服务已开启"); 其中SystemAdmin.cs为: public class SystemAdmin : ISystemAdminService { public string GetData(int value) { return string.Format("You entered: {0}", value); } } ...

    配置文件写法: 

         <services>
          <service name="arManagement.arManage">
            <endpoint address="net.tcp://localhost:8008/arManageService" binding="netTcpBinding"
              bindingConfiguration="" contract="domain.IArManageService" />
          </service>
          <service name="ar.wcfhost.SystemAdmin">
            <endpoint address="net.tcp://localhost:8008/SystemAdminService" binding="netTcpBinding"
              bindingConfiguration="" contract="domain.ISystemAdminService" />
          </service>
        </services>

    宿主程序写法:

     var varsystemAdminHost = new ServiceHost(typeof(SystemAdmin));
     systemAdminHost.Open();
    
     var arMgtHost = new ServiceHost(typeof(ARManage));
     arMgtHost.Open();
     LogFactory.Log.Info("WCF 服务已开启");

      其中SystemAdmin.cs为:

    public class SystemAdmin : ISystemAdminService
        {
            public string GetData(int value)
            {
                return string.Format("You entered: {0}", value);
            }
    }

    接口实现为:

     [ServiceContract]
        public interface ISystemAdminService
        {
            [OperationContract]
            string GetData(int value);
        }

    客户端访问封装:

    public static IServiceFactory ServiceFactory
            {
                get
                {
                    return ServiceLocator.Current.GetInstance(typeof(IServiceFactory)) as IServiceFactory;
                }
            }
           
            public static void UseService<TChannel>(string uri, Action<TChannel> action) where TChannel:class
            {
                var channel = ServiceFactory.CreateService<TChannel>(uri);
                action(channel);
                try
                {
                    ((IClientChannel)channel).Close();
                }
                catch
                {
                    ((IClientChannel)channel).Abort();
                }
            }
    
    public static void SystemAdminInvoke(Action<ISystemAdminService> action)
    {
        UseService(systemAdminURI,action);//const string systemAdminURI = "SystemAdminService";
    }

    IServiceFacotry实现:

     public T CreateService<T>(string uri) where T : class
            {
                var binding = new NetTcpBinding();            
                string addressUri = $"{ConfigHelper.GetAppConfig("devServiceAddress")}{uri}";           
                var address = new EndpointAddress(addressUri);
                var chanFactory = new ChannelFactory<T>(binding,address);
                T channel = chanFactory.CreateChannel();
                ((IClientChannel)channel).Open();
                return channel;
            }

    另一个问题:身份验证问题,如果调用接口需要Log日志,需要获取用户的id等信息,有必要做验证。一个经过测试可行的做法如下。

    1:改造服务器端:

     List<Type> hostType = new List<Type>()
                {
                    typeof(SystemAdmin),
                    typeof(ARManage)
                };
                hosts = new List<ServiceHost>();
                foreach (var item in hostType)
                {
                    var host = new ServiceHost(item);
                    host.Credentials.ServiceCertificate.SetCertificate("CN=localhost", StoreLocation.LocalMachine, StoreName.My);       
                    host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode
                        = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom;
                    host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new MyManagementCallValidator();
    
                    if (host.State != CommunicationState.Opening)
                        host.Open();
                    hosts.Add(host);
                }

    netTcpBinding配置如下: 

     <netTcpBinding>
               <binding name="WcfNewBinding">
                 <security mode="Message">
                   <transport clientCredentialType="None" />
                   <message clientCredentialType="UserName" />
                 </security>
               </binding>
            </netTcpBinding>

     自定义的用户密码验证类:

    public class MyManagementCallValidator : UserNamePasswordValidator
        {
            public override void Validate(string userName, string password)
            {            
            }
        }

    客户端创建服务接口改造:

    public T CreateService<T>(string uri) where T : class
            {
                var binding = new NetTcpBinding();
                var security = new NetTcpSecurity();
                security.Mode = SecurityMode.Message;
                security.Transport = new TcpTransportSecurity();
                security.Transport.ClientCredentialType = TcpClientCredentialType.None;
                security.Message = new MessageSecurityOverTcp();
                security.Message.ClientCredentialType = MessageCredentialType.UserName;
                binding.Security = security;            
                
                string addressUri =  $"{ConfigHelper.GetAppConfig("devServiceAddress")}{uri}";
                var address = new EndpointAddress(new Uri(addressUri), EndpointIdentity.CreateDnsIdentity("localhost"));
                var chanFactory = new ChannelFactory<T>(binding,address);
                chanFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
                UserNamePasswordClientCredential credential = chanFactory.Credentials.UserName;
                credential.UserName = Global.LoginUserId;
                credential.Password = Global.LoginUserPwd;
                T channel = chanFactory.CreateChannel();          
                ((IClientChannel)channel).Open();
                return channel;
            }

    报错1:

    传出消息标识检查失败。所预期的远程终结点的 DNS 标识为“xx.xx”,但是远程终结点提供的 DNS 请求为“localhost”。 

    解决办法:var address = new EndpointAddress(new Uri(addressUri), EndpointIdentity.CreateDnsIdentity("localhost")); 

    报错2:

    本地开发没有问题,部署到服务器上报错:无法使用以下搜索标准找到 X.509 证书: StoreName“My”、StoreLocation“LocalMachine”、FindType“FindBySubjectDistinguishedName”、FindValue“CN=localhost”。

    参考:http://www.cnblogs.com/chucklu/p/4685783.html 

    安装证书即可:

    服务器端获取用户身份标识的写法:

     IIdentity id = OperationContext.Current.ServiceSecurityContext.PrimaryIdentity;
                string userId = id.Name;
                return composite;

    调试程序,进入了断点:

    以上为net.tcp的绑定,如果要同时支持http访问,只需增加一个http服务接口

      #region 添加http访问
                    var httpHost = new ServiceHost(typeof(APIService));
                    System.ServiceModel.Channels.Binding httpbinding = new BasicHttpBinding();
                    httpHost.AddServiceEndpoint(typeof(IAPIService), httpbinding, "http://localhost:8002");
                    if (httpHost.Description.Behaviors.Find<System.ServiceModel.Description.ServiceMetadataBehavior>() == null)
                    {
                        ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                        behavior.HttpGetEnabled = true;
                        behavior.HttpGetUrl = new Uri("http://localhost:8002/api");
                        httpHost.Description.Behaviors.Add(behavior);
                        httpHost.Open();
                        hosts.Add(httpHost);
                    }
                    #endregion

    或者:var httpHost = new ServiceHost(typeof(APIService));

     httpHost.Open();

    然后在配置文件中添加相应的配置:

      <system.serviceModel>
         <bindings>     
           <basicHttpBinding>
             <binding name="BasicHttpBindingDataService">
               <security mode="None">
                 <transport clientCredentialType="None" />
                 <message clientCredentialType="UserName" />
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
         <services>       
           <service  name="managgement.wcfhost.APIService"   behaviorConfiguration="httpBehavior">
             <host>
                 <baseAddresses>
                      <add baseAddress="http://localhost:8002/api"/>           
               </baseAddresses>          
             </host>
             <endpoint address=""
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBindingDataService"                    
                contract="managgement.wcfhost.IAPIService" />
           </service>
         </services>
        <behaviors>
          <serviceBehaviors>  
            <behavior name="httpBehavior">
              <serviceMetadata httpGetEnabled="True"/>
              <serviceDebug includeExceptionDetailInFaults="False"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    

     

    展开全文
  • c# wcf的dome

    2020-10-21 10:07:12
    做了一个特别简单的wcf 的dome,包含客户端和服务端, 另外我发现了几个比较好的学习wcf 的博客,也分享一下 https://www.cnblogs.com/jiekzou/p/5325310.html https://www.cnblogs.com/llguanli/p/6782774.html ...
  • C# WCF基本使用

    千次阅读 2018-02-25 15:32:45
    WCF简介 WCF是一组数据通信的应用程序开发接口,可以理解为一种windows通信接口,在CS架构中可以实现客户端与服务器端的计算、文件传输等。 WCF合并了web服务、消息队列等许多功能,它是专门面向服务进行开发 ...

    WCF简介

    • WCF是一组数据通信的应用程序开发接口,可以理解为一种windows通信接口,在CS架构中可以实现客户端与服务器端的计算、文件传输等。
    • WCF合并了web服务、消息队列等许多功能,它是专门面向服务进行开发

    基本构成

    客户端

    • 与服务器连接与通信

    服务器

    • 实现通信的具体内容,主要是接口的实现内容

    通信接口

    • 定义客户端与服务器的通信的一些具体的函数以及消息契约等,通过接口实现
    • 使用ClientBase实现该接口

    代码

    参考链接

    其他

    修改文件的只读属性

    if (File.GetAttributes(newFp) != FileAttributes.Normal)
    {
        File.SetAttributes(newFp, System.IO.FileAttributes.Normal);
        (new FileInfo(newFp)).Directory.Attributes = FileAttributes.Normal & FileAttributes.Directory;
    }
    

    一些异常问题

    • System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项
      -》这是由于不同的项目的平台不一样,比如x86、x64等,把用到的项目都改成相同的即可。
    展开全文
  • C# WCF配置文件

    2019-01-09 12:22:06
    &lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;configuration&gt;  &lt;system.serviceModel&gt;  &lt;services&...WcfDemo.Service1&quo

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <!--添加服务-->
          <service name="WcfDemo.Service1" behaviorConfiguration="CalculatorServiceBehavior">
            <!--name 必须与代码中的host实例初始化的服务一样
    behaviorConfiguration 行为配置 -->
            <host>
              <baseAddresses>
                <!--添加调用服务地址-->
                <add baseAddress="http://localhost:8000/"/>
              </baseAddresses>

            </host>
            <!--添加契约接口 contract="WcfDemo.IService1" WcfDemo.IService1为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用-->
            <endpoint address="" binding="wsHttpBinding" contract="WcfDemo.IService1"></endpoint>

            <!--浏览器访问方法:http://localhost:8000/web/AddTicket?"tgds"=2-->
            <endpoint address="web" binding="webHttpBinding" contract="WcfDemo.IService1"
                    behaviorConfiguration="webBehavior">        
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="WcfDemo.IService1" />
          </service>

        </services>
        <!--定义CalculatorServiceBehavior的行为-->
        <behaviors>
          <serviceBehaviors>
            <behavior name="CalculatorServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>

            </behavior>

          </serviceBehaviors>

          <endpointBehaviors>
            <behavior name="webBehavior">
              <webHttp />
            </behavior>
          </endpointBehaviors>
          
        </behaviors>
      </system.serviceModel>
    </configuration>

    展开全文
  • C# WCF服务(一)

    千次阅读 2020-05-24 14:04:16
    WCF服务 概述 SOA SOA的意图 SOA的实现 WCF的作用 WCF 的基本概念 WCF的优势 WCF服务 概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯...
  • C# wcf动态使调用

    千次阅读 2019-03-19 11:42:04
    WCF操作类,使用于客户端 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Channels; using Sys...
  • 由于之前开发没有用过wcf的开发模式,但是新的公司用到了,所以有幸学习了一下,自己先做个实例很有必要 特别适合没有接触过WCF开发模式的新人,手把手操作,十几分钟搞定,可以跟着试一下,特别详细 创建一个...
  • C# WCF示例demo

    热门讨论 2013-11-06 09:34:09
    wcf的示例demo,适合初学者或者新手了解wcf的工作原理和使用技术
  • C# WCF入门学习.doc

    2013-01-10 10:55:00
    C# WCF入门学习.doc
  • 上一次提到,我们的WCF程序宿主是发布到IIS上面的。虽然这样做未尝不可,不过不便于我们进行“开始”或“停止”WCF服务的操作。所以再次尝试了编写以窗体应用程序作为WCF服务宿主的方式,并取得了成功。而下文则记录...
  • 添加——>新建项目——> WCF服务应用程序(右边能...然后我们就新建了一个WCF应用,WCF相当于一个WebService,是需要部署在服务器上的,但是如果是在本地新建的话,是可以在同一个解决方案中引用这个WCF服务...
  • android 调用C# WCF开发实例
  • VC++ 调用C# WCF接口

    2018-11-06 11:34:06
    VC++ 使用gsoap 调用C# 发布的WCF接口。需要注意 文档中各个路径的设置。测试代码可以按照这个来规则来写自己需要调用的接口。
  • C# WCF入门

    2020-12-15 21:44:52
    目录标题一、什么是WCF二、第一个WCF程序三、WCF服务的使用 一、什么是WCF WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的、安全、可信赖、事务性的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,593
精华内容 8,237
关键字:

c#wcf

c# 订阅