none
CRUD em WCF RRS feed

  • Pergunta

  • Estou tentando pela primeira vez criar um WebService. Para meu caso ele deve exportar métodos de CRUD para diversos domínios (Cliente, Endereco, Funcionário, Produto, etc.).
    Para cada domínio deve ser exportado três métodos, insert, change, delete. Nunca precisei trabalhar com WebServices antes. Por isso tive que buscar por exemplos e documentações. Mas o problema é que em tudo que achei os autores se concentram em casos simples, nada um pouco mais complexo. A situação que tenho é a seguinte.
    Para não ter que criar uma interface de contrato para cada CRUD, resolvi criar uma interface de contrato única, já que os métodos serão sempre os mesmos, mudando apenas o domínio. Sendo assim criei uma interface de contrato Genérica:

    using System.ServiceModel;
    namespace FoxMovieStoreWebService
    {
        [ServiceContract]
        public interface IDataPersistance<in T> where T : new ( )
        {
            [OperationContract]
            bool Insert ( T value );
            [OperationContract]
            bool Change ( T value );
            [OperationContract]
            bool Delete ( T value );
        }
    }

    E para cada domínio eu criei um arquivo chamado "Crud<NomeDoDomínio>", contendo os métodos de crud que serão expostos para o domínio em questão.
    São vários domínio mais colocarei aqui apenas dois para exemplificar. Por exemplo, no WebService eu tenho os domínios:

    Address:

    using System.Runtime.Serialization;
    
    namespace FoxMovieStoreWebService.Models
    {
        [DataContract]
    	public class Address
    	{
            [DataMember]
    		public int Id { get; set; }
    
            [DataMember]
    		public string Number { get; set; }
    
            [DataMember]
    		public string Complement { get; set; }
    
            [DataMember]
    		public ZipCode ZipCode { get; set; }
    	}
    }

    Functionary:

    using System.Collections.Generic;
    using System.Runtime.Serialization;
    
    namespace FoxMovieStoreWebService.Models
    {
        [DataContract]
        public class Functionary
        {
            [DataMember]
            public Person Person { get; set; }
    
            [DataMember]
            public bool IsRoot { get; set; }
    
            [DataMember]
            public List<Permission> Permissions { get; set; }
    
            public Functionary ( ) { IsRoot = false; }
        }
    }

    Agora as classes que implementam a interface de contrato e que fornecerão os métodos de CRUD para os consumidores do WebService.

    CrudAddress:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using FoxMovieStoreWebService.Models;
    
    namespace FoxMovieStoreWebService
    {
        public class CrudAddress : Crud, IDataPersistance<Address>
        {
            public bool Change ( Address value )
            {
            }
    
            public bool Delete ( Address value )
            {
            }
    
            public bool Insert ( Address value )
            {
    
            }
        }
    }


    CrudFunctionary:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using FoxMovieStoreWebService.Models;
    
    namespace FoxMovieStoreWebService
    {
        public class CrudFunctionary : Crud, IDataPersistance<Functionary>
        {
            public bool Change ( Functionary value )
            {
            }
    
            public bool Delete ( Functionary value )
            {
            }
    
            public bool Insert ( Functionary value )
            {
            }
        }
    }


    Como o WebService está em um projeto do tipo DLL, criei um projeto do tipo console para testar.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel;
    using System.ServiceModel.Description;
    using System.Text;
    using System.Threading.Tasks;
    using FoxMovieStoreWebService;
    using FoxMovieStoreWebService.Models;
    
    namespace TesteWebService
    {
        class Program
        {
            static void Main ( string[ ] args )
            {
                using ( ServiceHost host = new ServiceHost(typeof(CrudAddress), new Uri[ ] { new Uri("net.tcp://localhost:9876")}))
                {
                    host.Description.Behaviors.Add ( new ServiceMetadataBehavior ( ) );
                    host.AddServiceEndpoint ( typeof ( IDataPersistance<Address> ), new NetTcpBinding ( ), "srv" );
                    host.AddServiceEndpoint ( typeof ( IMetadataExchange ), MetadataExchangeBindings.CreateMexTcpBinding ( ), "mex" );
    
                    host.Open ( );
                    Console.ReadLine ( );
                }
            }
        }
    }

    Chegamos ao X da questão.
    O código acima carrega o WebService e exporta os métodos de CRUD de Address.
    Como eu faria para exportar todos os outros CRUDs (CrudClient.cs, CrudDependent.cs, CrudProduct.sc, etc.)?




    sábado, 25 de fevereiro de 2017 19:59