• WCF-初识DEMO


    类库 System.ServiceModle

    WCF类库

    契约IUser1,实现User1

    [ServiceContract]
        public interface IUser1
        {
            [OperationContract]
            string GetUser1Name(string name);
        }
    
    
        public class User1 : IUser1
        {
            public string GetUser1Name(string name)
            {
                return "我是usre1" + name;
            }
        }

    契约IUser2 ,实现User2

        [ServiceContract]
        public interface IUser2
        {
            [OperationContract]
            string GetUser1Name(string name);
        }
    
    
        public class User2 : IUser2
        {
            public string GetUser1Name(string name)
            {
                return "我是user2" + name;
            }
        }

    契约IUnity1和IUnity2,实现Unity(一个实现继承了两个契约,主意看一下配置文件如何配置)

        [ServiceContract]
        public interface IUnity1
        {
            [OperationContract]
            int GetUnityCount();
        }
    
    
        [ServiceContract]
        public interface IUnity2
        {
            [OperationContract]
            string GetUnityString();
        }
    
    
        public class Unity : IUnity1, IUnity2
        {
            public int GetUnityCount()
            {
                return 10;
            }
    
            public string GetUnityString()
            {
                return "Unity";
            }
        }

    宿主

            static void Main(string[] args)
            {
                ServiceHost sh1 = new ServiceHost(typeof(WcfLib.User1));
                sh1.Open();
                Console.WriteLine("服务1开启");
                ServiceHost sh2 = new ServiceHost(typeof(WcfLib.User2));
                sh2.Open();
                Console.WriteLine("服务2开启");
                ServiceHost sh3 = new ServiceHost(typeof(WcfLib.Unity.Unity));
                sh3.Open();
                Console.WriteLine("服务3开启");
                Console.ReadKey();
            }

      服务配置文件

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup>
      <system.serviceModel>
        <services>
          <!--name="命名空间名称.实现类名称"-->
          <service name="WcfLib.User1"  behaviorConfiguration="mexBehaviour">
            <endpoint address="MyServices1" binding="basicHttpBinding" contract="WcfLib.IUser1">
            </endpoint>
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:9999/"/>
              </baseAddresses>
            </host>
          </service>
          <service name="WcfLib.User2" behaviorConfiguration="mexBehaviour">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:6666/"/>
              </baseAddresses>
            </host>
            <endpoint address="MyServices2" binding="basicHttpBinding" contract="WcfLib.IUser2"></endpoint>
          </service>
          <service name="WcfLib.Unity.Unity" behaviorConfiguration="mexBehaviour">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:7777/"/>
                <add baseAddress="net.tcp://localhost:7776/"/>
              </baseAddresses>
            </host>
            <endpoint address="MyServices3" binding="basicHttpBinding" contract="WcfLib.Unity.IUnity1" ></endpoint>
            <!--错误:找不到具有绑定 NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址。注 册的基址方案是 [http]。   解决:TCP通讯 地址必须是TCP的(TCP不能宿主在IIS上)   net.tcp://localhost:7776/-->
            <endpoint address="MyServices4" binding="netTcpBinding" contract="WcfLib.Unity.IUnity2"></endpoint>
          </service>
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="mexBehaviour">
              <!--设置未false被人不能发现,一般当客户端已经加载好服务代理就可以设置为false了。配置修改,服务要重启,才能生效-->
              <serviceMetadata httpGetEnabled="true" />
            </behavior>
            <behavior>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    View Code

    客户端

    右键添加服务

    配置文件自动生成

            static void Main(string[] args)
            {
                WCFServiceUser1.User1Client cli1 = new WCFServiceUser1.User1Client();
                WCFServiceUser2.User2Client cli2 = new WCFServiceUser2.User2Client();
                WCFServiceUnity.Unity1Client cli3 = new WCFServiceUnity.Unity1Client();
                WCFServiceUnity.Unity2Client cli4 = new WCFServiceUnity.Unity2Client();
                Console.WriteLine(cli1.GetUser1Name("name1"));
                Console.WriteLine(cli2.GetUser1Name("name2"));
                Console.WriteLine(cli3.GetUnityCount());
                Console.WriteLine(cli4.GetUnityString());
            }

     WCF 调用服务标准写法

    static void Main(string[] args)
            {
                //不适用using,原因using在网络中断时,wcf不能关闭。websevice可以是用using释放,websevice标准写法是用using
                CustomService.UserServiceSoapClient ucli = null;
                try
                {
                    ucli = new CustomService.UserServiceSoapClient();
                    ucli.GetStr("");
                    //手动释放,
                    ucli.Close();
                }
                catch (Exception)
                {
                    if (ucli != null)
                    {
                        ucli.Abort();
                    }
                }
            }

    源码下载

  • 相关阅读:
    C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
    如何将CKeditor编辑器的上传和thinkphp结合
    在 VisualStudio 给文件起一个带分号的文件名会怎样
    dotnet ConditionalWeakTable 的底层原理
    GitHub 的 Action 判断仅在主仓库才执行脚本
    ASP.NET Core 将文件夹内容输出为压缩包文件方法
    dotnet Microsoft.Recognizers.Text 超强大的自然语言关键词提取库
    dotnet CBB 为什么决定推送 Tag 才能打包
    WPF 通过 InputManager 模拟调度触摸事件
    如何参与 .NET 的开发和设计
  • 原文地址:https://www.cnblogs.com/wudequn/p/7085875.html
Copyright © 2020-2023  润新知