zoukankan      html  css  js  c++  java
  • 基于.NET的WebService的实现和WCF的实现

    1.新建一个MVC web项目。

    2.点击项目,【右键】→【添加】→【新建项】

    3.点击【Web】→【Web服务】

    4.恭喜,Web Service已经新建成功,里面的方法就可以参考着根据自己的需要进行修改了,是不是很简单。

    5.Web Serice建成之后当然是开始调用了。在【引用】上【右键】,添加【服务引用】

    6.开始引用。

    7.恭喜服务已经引用成功。

    再看配置文件,会多出一些代码,这些都是自动生成的,可以看看理解理解。

    8.开始在程序中调用方法了

     9.到此为止Web Service的建立到调用已经全部完成。

    10.新建WCF与Web Service基本上是一样的,下面直图解不在介绍。

    点击项目,【右键】→【添加】→【新建项】→【Web】→【WCF服务】

    11.WCF建成之后当然是开始调用了。在【引用】上【右键】,添加【服务引用】,以后过程即使一模一样的了。

     

    12.WCF和Web Service已经建立成功,那么如何供外部访问呢,当时是发布了,发布在IIS就可以,和发布网站是一样的。

    WCF控制台应用程序例子

    上面这是个简单的架构图。Iservice大家都有的功能的接口(契约),IUserService针对不同的类定义不同的接口,

    AbstractService实现IService的公共方法,Uservice实现自己的方法,也可以重写集成的方法。

    下面是分层,Web层,大家可以当做不存在,哈哈。

    下面是IService层

    using System;
    using System.Collections.Generic;
    using System.ServiceModel;
    
    namespace IServiceClassLibrary
    {
        [ServiceContract]
        public interface IService<TModel> : IDisposable where TModel : new()
        {
            [OperationContract]
            string Add(TModel tModel);
    
            [OperationContract]
            string Delete(int id);
            
            [OperationContract]
            string Edit(TModel tModel);
    
            [OperationContract]
            TModel GetModel(int id);
    
            [OperationContract]
            IEnumerable<TModel> GetAll();
        }
    }
    using System;
    using System.Runtime.Serialization;
    
    namespace IServiceClassLibrary
    {
        [DataContract]
        public class UserData
        {
            [DataMember]
            public int UserID { get; set; }
    
            [DataMember]
            public string UserName { get; set; }
    
            [DataMember]
            public string Password { get; set; }
    
            [DataMember]
            public string Discribe { get; set; }
    
            [DataMember]
            public DateTime SubmitTime { get; set; }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.ServiceModel;
    
    namespace IServiceClassLibrary
    {
        [ServiceContract]
        public interface IUserService : IService<UserData>
        {
            [OperationContract]
            IDictionary<int, string> GetUserDict();
        }
    }

     下面是Service层

    using IServiceClassLibrary;
    using System;
    using System.Collections.Generic;
    
    namespace ServiceClassLibrary
    {
        public abstract class AbstractService<TModel> : IService<TModel> where TModel : new()
        {
            public virtual string Add(TModel tModel)
            {
                //throw new NotImplementedException();
                return "Add";
            }
    
            public virtual string Delete(int id)
            {
                //throw new NotImplementedException();
                return "Delete";
            }
    
            public virtual string Edit(TModel tModel)
            {
                //throw new NotImplementedException();
                return "Edit";
            }
    
            public virtual TModel GetModel(int id)
            {
                TModel tModel = new TModel();
                return tModel;
            }
    
            public virtual IEnumerable<TModel> GetAll()
            {
                IList<TModel> tModels = new List<TModel>();
                return tModels;
            }
    
            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
    
            protected virtual void Dispose(bool dispose)
            {
                if (dispose)
                {
                    //CleanUp managed objects by calling thier
                }
            }
        }
    }
    using IServiceClassLibrary;
    using System.Collections.Generic;
    
    namespace ServiceClassLibrary
    {
        public class UserService : AbstractService<UserData>, IUserService
        {
            public IDictionary<int, string> GetUserDict()
            {
                IDictionary<int, string> keyValue = new Dictionary<int, string>();
                keyValue.Add(1, "test");
                return keyValue;
            }
    
            protected override void Dispose(bool dispose)
            {
                if (dispose)
                {
                    //CleanUp managed objects by calling thier
                }
            }
        }
    }

    下面是Server层,这层需要配置了,【新建】→【控制台应用程序】建好之后,【添加】→【新建项】→【WCF 服务】,建号之后,生成的两个文件可以删去了,

    查看配置信息,对配置进行修改就可以了,懒人模式,高效准确。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <behaviors>
                <serviceBehaviors>
                    <behavior name="">
                        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                        <serviceDebug includeExceptionDetailInFaults="false" />
                    </behavior>
                </serviceBehaviors>
            </behaviors>
            <services>
                <service name="ServiceClassLibrary.UserService">
                    <endpoint address="" binding="basicHttpBinding" contract="IServiceClassLibrary.IUserService">
                        <identity>
                            <dns value="localhost" />
                        </identity>
                    </endpoint>
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                    <host>
                        <baseAddresses>
                            <add baseAddress="http://localhost:8733/" />
                        </baseAddresses>
                    </host>
                </service>
            </services>
        </system.serviceModel>
    </configuration>
    using IServiceClassLibrary;
    using ServiceClassLibrary;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WCFServer
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (ServiceHost host = new ServiceHost(typeof(UserService)))
                {
                    host.AddServiceEndpoint(typeof(IUserService),
                        new BasicHttpBinding(),
                        new Uri("http://localhost:8733/ServiceClassLibrary/UserService/"));
                    if (host.State != CommunicationState.Opening)
                    {
                        host.Open();
                    }
                    Console.WriteLine("服务已经启动!");
                    Console.ReadLine();
                }
            }
        }
    }

    下面是客服端

    using IServiceClassLibrary;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WCFClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                EndpointAddress ea = new EndpointAddress("http://localhost:8733/ServiceClassLibrary/UserService/");
                IUserService proxy = ChannelFactory<IUserService>.CreateChannel(new BasicHttpBinding(), ea);
                Console.WriteLine(proxy.Delete(0));
                Console.WriteLine(proxy.GetUserDict().First());
                Console.ReadLine();
            }
        }
    }

    OK,WCF程序已经建立完成,先启动Server,再启动Client,程序正常运行。

    如果遇到下面的问题,请以管理员身份运行就可以了。

    其他的WCF文章 

    1. WCF入门

    2. 我的第一个WCF程序

    3. Web Service 和WCF的比较

    4. 基于.NET的WebService的实现和WCF的实现

  • 相关阅读:
    邮件发送携带附件
    两个文件内容同行合并操作
    re模块,判断某行/某字符是否存在
    企业微信公众号告警Python脚本
    CodeForces 371D. Vessels 题解
    免安装 mysql
    kibana dev tools 操作 Elasticsearch
    win10 强制关掉被占用的端口
    值传递与引用传递
    微服务网关 soul
  • 原文地址:https://www.cnblogs.com/zhao123/p/5599251.html
Copyright © 2011-2022 走看看