zoukankan      html  css  js  c++  java
  • wcf服务契约的重载

    a. 服务端
    1.服务端 契约用OperationContract的Name实现重载
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    
        namespace WCF.Chapter2.Overloading.Host
        {
            [ServiceContract]
            public interface IContract
            {
                [OperationContract(Name = "say1")]
                string say();
    
                [OperationContract(Name = "say2")]
                string say(string str);
            }
        
    }
    2.服务实现
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace WCF.Chapter2.Overloading.Host.Service
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
        public class Service1 : IContract
        {
            public string say()
            {
                return "老鼠扛刀,满街找猫";
            }
    
            public string say(string str)
            {
                return str;
            }
        }
    
    }
    3.服务寄宿
    using System;
    using System.ServiceModel;
    using WCF.Chapter2.Overloading.Host.Service;
    namespace WCF.Chapter2.Overloading.Host
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (ServiceHost host = new ServiceHost(typeof(Service1)))
                {
                    host.Opened += delegate
                    {
                        Console.WriteLine("服务已开启...");
                    };
                    host.Open();
                    Console.ReadLine();
                }
    
                Console.WriteLine("服务已关闭...");
                Console.ReadLine();
            }
        }
    }
    4.终结点设置
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MEX">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
        <services>
          <service name="WCF.Chapter2.Overloading.Host.Service.Service1" behaviorConfiguration="MEX">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8000"/>
              </baseAddresses>
            </host>
    
            <endpoint address="http://localhost:8001/say" binding="basicHttpBinding" contract="WCF.Chapter2.Overloading.Host.IContract"></endpoint>
          </service>
        </services>
      </system.serviceModel>
    </configuration>
    b. 客户端
    1.客户端契约 这个很重要需要和服务端分开不能用同一个契约,而是实现了一个等效契约,所以此处说明终结点三要素A,B,C 的A,B必须一模一样但是C只要等效就可以
    using System;
    using System.ServiceModel;
    
    namespace WCF.Chapter2.Overloading.Client
    {
        [ServiceContract]
        public interface IContract
        {
            [OperationContract(Name = "say1")]
            string say();
    
            [OperationContract(Name = "say2")]
            string say(string str);
        }
    }
    2.客户端代理 本质也是channelfactory.createchannel
    using System;
    using System.ServiceModel;
    
    namespace WCF.Chapter2.Overloading.Client
    {
        public class ClientProxy : ClientBase<IContract>, IContract
        {
            public ClientProxy()
            { }
    
            public ClientProxy(string configurationName) :
                base(configurationName)
            { }
    
            public string say()
            {
                return base.Channel.say();
            }
    
            public string say(string str)
            {
                return base.Channel.say(str);
            }
        }
    }
    
    3.客户端终结点配置
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <client>
          <endpoint address="http://localhost:8001/say" binding="basicHttpBinding" contract="WCF.Chapter2.Overloading.Client.IContract"></endpoint>
        </client>
      </system.serviceModel>
    </configuration>
    4.调用代码
    using System;
    using System.ServiceModel;
    
    namespace WCF.Chapter2.Overloading.Client
    {
        public class ClientProxy : ClientBase<IContract>, IContract
        {
            public ClientProxy()
            { }
    
            public ClientProxy(string configurationName) :
                base(configurationName)
            { }
    
            public string say()
            {
                return base.Channel.say();
            }
    
            public string say(string str)
            {
                return base.Channel.say(str);
            }
        }
    }
  • 相关阅读:
    中国石油大学天梯赛真题模拟第三场
    中国石油大学天梯赛真题模拟第一场
    PTA 水果忍者
    演练3-1:留言管理系统的制作
    知识点4-1:哪些应该放在动作方法中?
    Week5(10月11日):国庆后补课的复杂心情
    知识点3-5:使用强类型模板
    Week5(10月10日):国庆之后,让我们整装期待元旦吧
    知识点3-6:HTML辅助方法
    知识点3-4:给视图传递数据
  • 原文地址:https://www.cnblogs.com/kexb/p/7436397.html
Copyright © 2011-2022 走看看