2016-04-11 8 views
0

Das erste Mal hier, hatte nie die Notwendigkeit, um etwas zu bitten, weil es immer leicht war, die Antwort in anderen Fragen zu finden.Fehlende veröffentlichte Klassen auf Service-Referenz C#

Das Problem, das ich bin vor:

Ich habe soeben die ServiceLayer die Dienste correspondant zu BusinesLogicLayer veröffentlichen wird zu.

Also das ist mein Code:

using Shared.Entities; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using System.Threading.Tasks; 

namespace ServiceLayer 
{ 
[ServiceContract] 
public interface IServiceEmployees 
{ 
    [OperationContract] 
    void AddEmployee(Employee emp); 

    [OperationContract] 
    void DeleteEmployee(int id); 

    [OperationContract] 
    void UpdateEmployee(Employee emp); 

    [OperationContract] 
    List<Employee> GetAllEmployees(); 

    [OperationContract] 
    Employee GetEmployee(int id); 

    [OperationContract] 
    double CalcPartTimeEmployeeSalary(int idEmployee, int hours); 
} 
} 

Nächste Datei:

using BusinessLogicLayer; 
using Shared.Entities; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.Text; 
using System.Threading.Tasks; 

namespace ServiceLayer 
{ 
public class ServiceEmployees : IServiceEmployees 
{ 
    private static IBLEmployees blHandler; 

    public ServiceEmployees() 
    { 
     blHandler = Program.blHandler; 
    } 

    public void AddEmployee(Employee emp) 
    { 
     blHandler.AddEmployee(emp); 
    } 

    public void DeleteEmployee(int id) 
    { 
     blHandler.DeleteEmployee(id); 
    } 

    public void UpdateEmployee(Employee emp) 
    { 
     blHandler.UpdateEmployee(emp); 
    } 

    public List<Employee> GetAllEmployees() 
    { 
     return blHandler.GetAllEmployees(); 
    } 

    public Employee GetEmployee(int id) 
    { 
     return blHandler.GetEmployee(id); 
    } 

    public double CalcPartTimeEmployeeSalary(int idEmployee, int hours) 
    { 
     return blHandler.CalcPartTimeEmployeeSalary(idEmployee, hours); 
    } 
    } 
    } 

Nächste Datei:

 using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Runtime.Serialization; 

    namespace Shared.Entities 
    { 

    [DataContract] 
    [KnownType(typeof(FullTimeEmployee))] 
    [KnownType(typeof(PartTimeEmployee))] 
    public abstract class Employee 
    { 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember] 
    public DateTime StartDate { get; set; } 
    } 
    } 

Nächste Dateien:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Runtime.Serialization; 

    namespace Shared.Entities 
    { 
[DataContract] 
public class FullTimeEmployee : Employee 
{ 
    [DataMember] 
    public int Salary { get; set; } 
} 
} 
Datei

Last:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Runtime.Serialization; 

    namespace Shared.Entities 
    { 
    [DataContract] 
    public class PartTimeEmployee : Employee 
    { 
    [DataMember] 
    public double HourlyRate { get; set; } 
    } 
    } 

Allright, das sind diejenigen, ich brauche in einer WSDL-Datei erhalten veröffentlicht später zu konsumieren, statt in PresentationLayer zu BusinessLayer und Datalayer zuzugreifen.

Ich habe es geschafft, das erhalten veröffentlicht diese OperationContracts ohne Probleme, und wenn ich die URL als Dienstverweis auf dem PresentationLayerWinForm hinzufügen, erhalte ich die folgende.

wsdl description

Ich brauche die Employee.cs, PartTimeEmployee, FullTimeEmployee clases auch in dieser Beschreibung zu sehen, aber ich nicht sie bekommen, obwohl sie in der WSDL-Datei definiert sind.

wsdl_2

Was könnte möglicherweise schief gelaufen ist?

Ive gereinigt meine proyect, rebuiled es mehrmals und ich immer noch die gleiche Sache bekommen, und ich brauche diese clases te so errase i veröffentlicht werden den Verweis auf shared.entities von PresentationLayerWinForm

Thanks 4 helfenden,

Antwort

0

Problem gelöst;

Das Problem war, dass meine serverseitige DataContract-Klasse derselbe Name ist wie eine Klasse, die ich lokal für den Client des Webdiensts verwende, sodass Visual Studio standardmäßig Typen erneut verwendet. Klicken Sie mit der rechten Maustaste auf die Service-Referenz, klicken Sie auf Konfigurieren und deaktivieren Sie die Wiederverwendung von Typ.

Dank jedenfalls.

Verwandte Themen