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的实现

  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/zhao123/p/5599251.html
Copyright © 2011-2022 走看看