2009-07-24 8 views
0

Ich habe eine separate Assembly (Verweis von WebService), in dem ich eine Klasse (sagen wir ABC) und eine Sammlung dieser Klasse (ABCCollection: IList, wo T: ABC) erstellt haben. Wenn ich nun die Proxy-Dateien (output.config und Service1.cs) erstelle, wird die Defienierung dieser beiden Klassen nicht angezeigt. Stattdessen wird die ABCCollection in Servic1.cs wie ABCCollection4IP3 dargestellt.Exposing Struktur - WCF Web Service

Bitte lassen Sie mich die mögliche Ursache für diese Probleme wissen ..

+0

Was ist 4IP3? Dies hat zu der Sammlung beigetragen? Ich habe das nie zuvor getan. –

+0

Ja, wenn ich die CS-Datei von Svcutil.exe generieren wird es auf meine benutzerdefinierte Sammlung etwas wie diese beziehen –

+0

Um mehr zu erklären Ich möchte meine benutzerdefinierte Sammlung von meinem Web-Service offen legen .. Wie kann ich das tun ... Die Gewohnheit Sammelklasse befindet sich in der separaten Assembly, auf die von meinem WebService (WCF) verwiesen wird –

Antwort

0

Sie sind nicht dazu gedacht, die gleiche Art zu sein. Das ist Absicht. Überlegen Sie, wie es funktionieren würde, wenn Ihr Dienst in .NET und Ihr Client in Java wäre. Sie würden eindeutig zwei verschiedene Arten sein.

0

Eine bewährte Methode, wenn ein WCF-Dienst entwerfen, ist Ihr Projekt in einzelne Baugruppen aufgeteilt:

Assembly SomeProject.ServiceContract

Diese Baugruppe enthält Servicevertrag (nur die Schnittstellen).

Beispiel:

[ServiceContract (...)] 
public interface ICan { 

    [ServiceOperation (...)] 
    void EatCandies (MyListOfCandies candies); 

} 

Assembly SomeProject.DataObjects

Diese Baugruppe enthält alle Datenobjekte, die von Ihrem Service-Vertrag verwendet wird.

Beispiel:

[DataObject] 
public class MyListOfCandies : List<Candy> { 
    ... 
} 

In Ihrem Projekt, das Ihren Web-Service raubend ist referenzieren Sie die Assembly "SomeProject.DataObjects" und dann Ihren Web-Service hinzufügen. Sie werden feststellen, dass Visual Studio keine Stub-Objekte mehr generiert, sondern Ihre Implementierung verwendet.

Sie können das gleiche mit der ServiceContract-Baugruppe tun. Auf diese Weise können Sie weiterhin Webdienste verwenden, aber Sie werden Kompilierungsfehler erhalten, wenn Sie Ihre Schnittstelle ändern.