2009-07-27 3 views
0

in ASP.NET 3.5 Ich erhalte die oben genannten Fehler, wenn ich versuche, das Web-Service-Projekt einer Silverlight-AnwendungASP.NET Compilerfehler muss einen Körper erklären, weil es nicht abstrakt markiert ist

Die Codezeilen Erzeugungs zu kompilieren Der Fehler liegt unter 'public List GetAccounts();'

namespace BegSilver.Web 
{ 
    [ServiceContract(Namespace = "")] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class Service1 
    { 
    [OperationContract] 
    public List<Accounts> GetAccounts(); 

    // Add more operations here and mark them with [OperationContract] 
    } 
} 

Dies ist die Methode es verweist:

public class Accounts 
    { 
    private Int32 acpk {get; set;} 
    private Decimal acctnumber { get; set; } 
    private String name { get; set; } 
    private String type { get; set; } 


    public static List<Accounts> GetAccounts() 
    { 
     List<Accounts> a = new List<Accounts>(); 

     a.Add(
     new Accounts() 
     { 
      acpk = 1, 
      acctnumber = 332.3m, 
      name = "Test", 
      type = "CASH" 
     }); 

    return a; 
    } 

ich mehrere Erklärungen und versuchte, die vorgeschlagenen Korrekturen, aber keiner von ihnen gearbeitet haben, gesehen haben.

Jede Hilfe wäre willkommen. Vielen Dank, Mike Thomas

Antwort

2

Sie müssen entweder:

public List<Accounts> GetAccounts() 
{ 
    //just saw what you were doing above 
    return Accounts.GetAccounts(); 
} 

oder diese, wenn Sie auf das Überschreiben der Funktionalität in einer Unterklasse planen:

public abstract List<Accounts> GetAccounts(); 

Grundsätzlich kann man einfach‘ t eine leere Methode haben, ohne dass der Compiler etwas zu kompilieren hat oder ohne dass der Compiler weiß, dass Sie die Methode später implementieren werden.

1

Sie haben 2 Dinge durcheinander gebracht, eine Schnittstelle und den eigentlichen Service. Die Schnittstelle definiert den Service COntract und der tatsächliche Service implementiert diesen Vertrag. Sie müssen nachlesen, wie Sie den Servicevertrag implementieren (d. H. Eine Schnittstelle definieren), der die Endpunkte (d. H. Die verfügbaren Methoden) für Ihren Service definiert und dann den Vertrag tatsächlich implementiert.

Sehen Sie diese 2 Seiten auf MSDN:

Designing Service Contracts

Implementing Service Contracts

examle von der zweiten Seite genommen:

// Define the IMath contract. 
[ServiceContract] 
public interface IMath 
{ 
    [OperationContract] 
    double Add(double A, double B); 

    [OperationContract] 
    double Multiply (double A, double B); 
} 
// Implement the IMath contract in the MathService class. 
public class MathService : IMath 
{ 
    public double Add (double A, double B) { return A + B; } 
    public double Multiply (double A, double B) { return A * B; } 
} 

oder es direkt auf der Dienstklasse definieren:

[ServiceContract]class MathService 
{ 
    [OperationContract] 
    public double Add(double A, double B) { return A + B; } 
    // notice the body of the method is filled in between the curly braces 
    [OperationContract] 
    public double Multiply (double A, double B) { return A * B; } 
} 
Verwandte Themen