• WCF入门实例


    WCF服务不能孤立的存在,如何运行呢?WCF 服务宿主程序可以分为两种:1、寄宿在自身进程中(控制台程序)2、寄宿在IIS进程中。

    首先来看第一种:

    创建一个控制台程序, 然后添加一个wcf服务,项目中会自动添加一个IXXService.cs、XXService.cs和App.config 三个文件,IXXService.cs就是要提供给外界的方法的借口,XXService.cs继承IXXService.cs实现IXXService.cs中定义的方法。

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;

    namespace Wcf服务端
    {
        
    // 注意: 如果更改此处的接口名称“IService1”,也必须更新 App.config 中对“IService1”的引用。
        [ServiceContract]
        
    public interface IMyWCFService
        {
            [OperationContract]
            
    string GetData(int value);

            [OperationContract]
            CompositeType GetDataUsingDataContract(CompositeType composite);

            
    // 任务: 在此处添加服务操作
        }

        
    // 使用下面示例中说明的数据协定将复合类型添加到服务操作
        [DataContract]
        
    public class CompositeType
        {
            
    bool boolValue = true;
            
    string stringValue = "Hello ";

            [DataMember]
            
    public bool BoolValue
            {
                
    get { return boolValue; }
                
    set { boolValue = value; }
            }

            [DataMember]
            
    public string StringValue
            {
                
    get { return stringValue; }
                
    set { stringValue = value; }
            }
        }
    }

     代码

     app.config

    代码

    写好借口和实现之后就需要控制台程序把这个wcf运行起来

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using System.ServiceModel.Description;

    namespace WCF服务端程序
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                
    using (ServiceHost host = new ServiceHost(typeof(MyWCFService)))
                {
                    host.AddServiceEndpoint(
    typeof(IMyWCFService), new WSHttpBinding(), "http://127.0.0.1:9999/mywcf");
                    
    if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
                    {
                        ServiceMetadataBehavior behavior 
    = new ServiceMetadataBehavior();
                        behavior.HttpGetEnabled 
    = true;
                        behavior.HttpGetUrl 
    = new Uri("http://127.0.0.1:9999/mywcf/metadata");
                        host.Description.Behaviors.Add(behavior);
                    }
                    host.Opened 
    += delegate
                    {
                        Console.WriteLine(
    "mywcf已经启动,按任意键终止服务!");
                    };

                    host.Open();
                    Console.Read();
                }
            }
        }
    }

     运行之后访问http://127.0.0.1:9999/mywcf/metadata就会看到

    第二种寄宿在IIS进程上

    首先创建一个web项目,然后在项目中添加wcf服务,此时会生成 IXXService.cs、XXService.svc两个文件,并在web.config中添加

    <system.serviceModel>
            <behaviors>
                <serviceBehaviors>
                    <behavior name="WCF绑在IIS.MyWCFonIISBehavior">
                        <serviceMetadata httpGetEnabled="true" />
                        <serviceDebug includeExceptionDetailInFaults="false" />
                    </behavior>
                </serviceBehaviors>
            </behaviors>
            <services>
                <service behaviorConfiguration="WCF绑在IIS.MyWCFonIISBehavior"
                    name="WCF绑在IIS.MyWCFonIIS">
                    <endpoint address="" binding="wsHttpBinding" contract="WCF绑在IIS.IMyWCFonIIS" name="wcfoniis">
                        <identity>
                            <dns value="localhost" />
                        </identity>
                    </endpoint>
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                </service>
            </services>
        </system.serviceModel> 

     相应的在IXXService.cs和XXService.svc定义接口和实现,完成之后,在IIS中新建站点,指向程序所在目录。就可以访问了。

    创建完成WCF服务之后,客户端怎样调用?在需要调用的项目中添加服务引用, 之后就可以调用了,以下介绍两种种调用的方式:

    1、直接new一个wcf的实例  

    using (var client = new MyWCFService.MyWCFServiceClient())

    {
    Console.WriteLine(client.GetData(1));Console.Read();}

    2、通过服务代理的方式访问

    using (ChannelFactory<IMyWCFService> channelFactory = new ChannelFactory<IMyWCFService>(new WSHttpBinding(), "http://127.0.0.1:9999/mywcf"))
    {
    IMyWCFService proxy = channelFactory.CreateChannel();
    using (proxy as IDisposable)
    {
    Console.WriteLine(proxy.GetData(1));
    Console.WriteLine(proxy.GetDataUsingDataContract(new MyWCF客户端程序.MyWCFService.CompositeType()));
    Console.Read();
    }

     wcf入门实例先简单介绍到这里。

  • 相关阅读:
    57.纯 CSS 创作一双黑暗中的眼睛
    b1.关于em和px的关系
    56.纯 CSS 描述程序员的生活
    55.1拓展之边框border-width属性。
    55.纯 CSS 创作一个太阳、地球、月亮的运转模型
    54.纯 CSS 创作一副国际象棋
    53.纯 CSS 创作一个文本淡入淡出的 loader 动画
    52.纯 CSS 创作一个小球绕着圆环盘旋的动画
    ps
    05
  • 原文地址:https://www.cnblogs.com/dlz1123/p/1962478.html
Copyright © 2020-2023  润新知