4 Stimmen

Benutzerdefiniertes Vorlagen für Visual Studio Service-Verweise?

Die Einrichtung

Ich möchte einen Webdienst in Visual Studio verwenden. Ich habe einen Dienstverweis hinzugefügt und ihn auf ein WSDL-Dokument verwiesen. Ich erhalte eine Menge generierten Codes, der einwandfrei funktioniert.

Das Problem

In dem Dialogfeld zum Dienstverweis habe ich "Intern" als "Zugriffsebene für generierte Klassen" ausgewählt. Es scheint, als ob dadurch das "internal" Schlüsselwort vor die WhateverSoapClient-Klasse gesetzt wird. Super. Allerdings sind die generierten Modelklassen alle von den Schlüsselwörtern "public partial" begleitet. Der "partial"-Teil ist in Ordnung (sogar erwünscht), aber nicht so das public. Ich möchte, dass diese Klassen ebenfalls intern sind.

Die Lösung?

Sicherlich benutzt Visual Studio (svcutil.exe?) eine Vorlage, um Reference.cs zu generieren, oder? Gibt es einen Weg, diese Vorlage zu ändern oder eine alternative anzugeben? Oder bin ich auf dem Holzweg?

Danke!

Ich bin ganz neu in diesem Bereich, daher habe ich die Frage vielleicht schlecht formuliert.


Bearbeiten: Als Antwort auf den Kommentar von Tuzo, verbinde ich Visual Studio mit dem folgenden:

https://sebomarketing.worldsecuresystems.com/CatalystWebService/CatalystEcommerceWebservice.asmx?WSDL.

VS generiert eine interne Klasse namens CatalystEcommerceWebserviceSoapClient, die eine Methode namens Catalogue_Retrieve() hat. Catalogue_Retrieve() gibt ein Catalogue-Objekt zurück, und Visual Studio generiert die Catalogue-Klasse als "public partial". Ich möchte, dass sie intern ist.

Hier sind einige Ausschnitte von dem, was generiert wird:

internal partial class CatalystEcommerceWebsierviceSoapClient : System.ServiceModel.ClientBase, BcApi.EcommerceApi.CatalystEcommerceWebserviceSoap {
    public BcApi.EcommerceApi.Catalogue Catalogue_Retrieve(...) {
        // ...
    }
}

public partial class Catalogue : object, System.ComponentModel.INotifyPropertyChanged {
    // ...
}

Und als Antwort auf Jamie, ich kenne T4-Vorlagen dank SubSonic. Also habe ich schon etwas nach einer T4-bezogenen Antwort auf dieses Problem gesucht. Ich könnte noch etwas weiter graben. Danke für den Hinweis.

2voto

RMD Punkte 2660

Sie haben keine der Attribute eingeschlossen, die die öffentliche Klasse dekorieren, aber ich vermute, wenn Sie das getan hätten, wäre eines der Attribute gewesen:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="blahblahblah")]

Wenn dies der Fall ist, dann liegt der Grund, warum svcutil sich weigert, diese Klassen als intern zu kennzeichnen, an der Begrenzung, wie die Klassendaten serialisiert werden; der XmlSerializer erfordert, dass die Klassen öffentlich sind.

Daher kann svcutil nur die Service-Schnittstellen und Service-Implementierungsklassen als intern kennzeichnen.

Selbst wenn Sie eine benutzerdefinierte T4-Vorlage erstellen würden, die all diese Klassen als intern generiert, würden Sie wahrscheinlich feststellen, dass Sie nicht mehr in der Lage sind, mit dem Dienst zu kommunizieren.

0voto

CodeMonkeyKing Punkte 4352

Dies ist keine Antwort, um Ihr Problem zu lösen, jedoch kann es erklären, warum Sie (und ich) dies in unseren Datenvertragsklassen sehen:

MSDN - Problembehandlung von Serviceverweisen

-1voto

Graham Punkte 56

Wenn Sie den Service-Verweis nicht aktualisieren werden, können Sie diese Datei manuell bearbeiten. Ja, Änderungen gehen beim Aktualisieren verloren, aber dies geschieht nicht automatisch, daher brauchen Sie sich darüber keine Sorgen zu machen, dass dies zufällig passiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X