none
Unbekannte Projektstruktur RRS feed

  • Frage

  • Hallo Leute,

    in einem funktionierenden C# Projekt habe ich folgende Projektstruktur1(Ausschnitt)

    Das ähnelt folgendem Erscheinungsbild aus einem von mir erstellten Projekt2(Ausschnitt):

    Allerdings wird im Projekt des ersten Ausschnitt nix geliefert, es werden ausschließlich StarWebService genutzt bzw. BODs verschickt, wohingegen im Projekt des zweiten Ausschnitt der Webserver etwas zurück gibt. Wozu wurde also Projektstruktur 1 so festgelegt? Wie kann ich es bei mir nachstellen (ohne einen eigenen Server aufzusetzen)? Inwiefern unterschieden sich Dateien der Endung *.asmx und *.svc? Wenn ich in Projekt 1 über den WCF Manger die *.wsdl Datei integriere, habe ich alle Klassen, bis auf jene, welche die BOD letztlich verschickt. Folgender Befehl ist also nicht möglich:

    OTCWebservice otcWebservice=new OTCWebservice();
    Innerhalb OTCStarWebService ist diese Klasse jedoch enthalten










    • Bearbeitet tklustig Freitag, 4. Oktober 2019 19:32
    Freitag, 4. Oktober 2019 19:19

Antworten

  • Hi,

    dann fehlt die Klasse wohl in der WSDL und Du musst sie manuell erstellen. In der Doku sollte stehen, wie sie auszusehen hat.

    Alternativ kannst Du auch mal probieren, die Proxyklassen über den Webservice Assistenten im Visual Studio generieren zu lassen.

    Wie man einen Dienstverweis hinzufügt, weißt Du ja (siehe einen deiner anderen Threads Webservice(wsdl) lässt sich nicht einbinden). Gib dort mal die http Adresse des aufrufbaren Webservice ein. Ggfs. wird die entsprechende Klasse dann generiert. Falls nicht, musst Du die halt selbst aufbauen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 7. Oktober 2019 18:16
    Moderator
  • Hi,

    Wie der serverseitige  Webservice generiert wurde, das weiß ich leider immer noch nicht. Da steht
    // Dieser Quellcode wurde automatisch generiert von wsdl, Version=4.0.30319.33440.

    das ist nicht der serverseitige Webservice, sondern eine der Proxyklassen, die für die Ansteuerung eines Webservice vom Visual Studio Assistenten erzeugt wurden.

    Wie kann man diesen Serverdienst automatisch erzeugen lassen?

    Gar nicht.

    Wozu nutzt man die wie noch? Welches Tool könnte dafür benutzt worden sein?

    Die Frage verstehe ich nicht. In dem oben verlinkten Thread (der von dir selbst stammt) sieht man doch recht deutlich, dass das über "Dienstverweis hinzufügen" gemacht wurde!? Oder was genau meinst Du mit deiner Frage?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 10. Oktober 2019 08:02
    Moderator

Alle Antworten

  • Hi Thomas,
    asmx steht für einen klassischen Webservice, siehe beispielsweise hier. Um zu testen, ob der Webservice funktioniert, rufe einfach in einem Browser "http://localhost:54050?wsdl" auf. Wenn der Webservice richtig funktioniert, wird die Beschreibung (wsdl) des Webservices zurückgegeben (XML-Datei). Mit dieser Beschreibung kann der Proxy generiert werden, mit dessen Hilfe aus einem Programm die Methoden (WebMethod) aufgerufen werden können. Im Visual Studio wird der Proxy im Hintergrund generiert, wenn eine WebReference hinzugefügt wird. Die Adresse des Servers wird dabei in der config-Datei gespeichert und kann später ggf. geändert werden.


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Samstag, 5. Oktober 2019 06:50
  • Das ist mir immer noch einiges unklar :=(

    Deinem Link konnte ich folgendes entnehmen:

    Schreiben eines einfachen .asmx-Webdiensts
    
    (1)Öffnen Sie Visual Studio .NET.
    (2)Klicken Sie im Menü Datei auf Neu, und klicken Sie anschließend auf Projekt. Unter Projekttypen klicken Sie auf Visual C#-Projekte. Klicken Sie dann unter Vorlagen auf die Option ASP.NET-Webdienst. Geben Sie in das Textfeld Ort den Begriff MathService ein, um den standardmäßig ausgewählten Namen (WebService1) in „MathService“ zu ändern.
    (3)
    Ändern Sie den Namen des Standard-Webdiensts, der mit Service1.asmx erstellt wurde, in MathService.asmx.
    
    etc..etc..

    Genau das verstehe ich nicht. Es musste überhaupt kein Webdienst geschrieben werden ,da in Projekt1 ausschließlich konsumiert wird.

    (In Projekt2 bin ich ähnlich vorgegangen, da machte es auch Sinn. Für Projekt 1 erschließt sich mir der Sinn nicht. Nach Rückfrage wurde das Tool SoapUI 5.3 genutzt, um die StartWebService Versandmethoden zu integrieren. Warum das denn?)





    • Bearbeitet tklustig Sonntag, 6. Oktober 2019 00:06
    Samstag, 5. Oktober 2019 23:55
  • Hi,

    Genau das verstehe ich nicht. Es musste überhaupt kein Webdienst geschrieben werden ,da in Projekt1 ausschließlich konsumiert wird.

    dann frag doch denjenigen, der das gemacht hat. Hellsehen können wir hier ja nicht. (Ok, eigentlich schon aber unsere Glaskugeln sind grade kollektiv im Ausstand)

    Nach Rückfrage wurde das Tool SoapUI 5.3 genutzt, um die StartWebService Versandmethoden zu integrieren. Warum das denn?

    Auch das kann dir nur derjenige beantworten, der das gemacht hat. Evtl. konnte und/oder wollte er das nicht alles selbst machen. Evtl. auch eine Vorgabe von irgendwem. Oder es hat sich einfach angeboten. ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Sonntag, 6. Oktober 2019 06:55
    Moderator
  • Hi Thomas,
    wenn Du einen asmx-Webdienst programmierst, so erstellst Du eine Server-Komponente, die im IIS gehostet wird. Im Client kann dieser Dienst konsumiert werden, indem eine WebReferenz auf den Webdienst hinzugefügt wird.

    Bei mir bleibt die Frage: "Was willst Du machen bzw. erreichen?". Und was verstehst Du beim Beschreiten des ausgewählten Weges (Technologie) nicht? Willst Du einen WCF-Service oder einen klassischen asmx-WebService erstellen? Wie sieht der Client aus? Was erfordert der Client?


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Sonntag, 6. Oktober 2019 06:56
  • Ich möchte einen weiteren WebService in das Projekt integrieren, dessen wsdl ich bereits habe. Ich möchte keinesfalls einen Webservice anbieten. Das gesamte Projekt bietet nix an, es konsumiert ausschließlich STARWebservice, die entweder über das Tool SoapUI oder über den WCF Manager integriert wurden. Aus diesem Grunde verstehe ich nicht, warum die Struktur so aufgebaut wurde, wie in Projekt1 aufgezeigt. Das Projekt bietet rein gar nix an. Weshalb wird denn dann die Serverkomponente überhaupt benötigt?

    Des weiteren ist mir unklar, warum ich innerhalb des Projektes1 über die Klasse OTCWebservice verfüge.

    Wenn ich das Projekt bei mir lokal versuche nachzustellen und die wsdl über den WCF Manager integriere, habe ich viele,viele Klassen integriert, bis auf diese eine. Die fehlt. Das ist aber die wichtigste.

    P.S: An Stefan: Ich kann diejenige leider nicht mehr fragen :=( Sie ist nicht mehr verfügbar. Sonst hätte ich mir die Vorgehensweise Schritt für Schritt zeigen und erklären lassen.





    • Bearbeitet tklustig Sonntag, 6. Oktober 2019 13:32
    Sonntag, 6. Oktober 2019 13:22
  • Hi,

    Ich möchte einen weiteren WebService in das Projekt integrieren, dessen wsdl ich bereits habe.

    dann tu das doch? Wie das geht, weißt Du?

    Ich möchte keinesfalls einen Webservice anbieten.

    Das tust Du aber derzeit.

    Das gesamte Projekt bietet nix an, es konsumiert ausschließlich STARWebservice, die entweder über das Tool SoapUI oder über den WCF Manager integriert wurden.

    Das Projekt bietet einen Webservice an. Ob auch ein weiterer Webservice konsumiert wird, lässt sich so nicht sagen, da wir den Code nicht kennen.

    Aus diesem Grunde verstehe ich nicht, warum die Struktur so aufgebaut wurde, wie in Projekt1 aufgezeigt.

    Wir auch nicht. Der Entwickler bzw. die Entwicklerin wird sich hoffentlich schon etwas dabei gedacht haben. Muss aber nicht so sein.

    Das Projekt bietet rein gar nix an.

    Derzeit schon.

    Weshalb wird denn dann die Serverkomponente überhaupt benötigt?

    Weil es ein ASP.NET Webservice Projekt ist, das eben einen Webservice anbietet-

    Des weiteren ist mir unklar, warum ich innerhalb des Projektes1 über die Klasse OTCWebservice verfüge.

    Das können wir dir auch nicht beantworten.

    Wenn ich das Projekt bei mir lokal versuche nachzustellen und die wsdl über den WCF Manager integriere, habe ich viele,viele Klassen integriert, bis auf diese eine. Die fehlt. Das ist aber die wichtigste.

    Welche "eine"?

    So ganz grundsätzlich würde ich das einfach alles wegschmeißen (ist ja lt. dir eh unbrauchbar und bietet nicht das, was Du willst), mich dann mal ruhig hinsetzen, erstmal notieren, was genau Du wo und wie auf welchem Weg erreichen willst, ggfs. Referenzen zu den zu integrierenden Webservices ermitteln und dann an die Umsetzung gehen. Also nicht 2 Minuten überlegen und dann "irgendwas" machen, sondern wirklich ermitteln, planen, umsetzen.

    So unstrukturiert, wie Du hier vorgehst, wird das leider nie was. Es bringt auch nichts, wenn Du dich fragst, warum irgendjemand, den Du nicht mehr fragen kannst, irgendwas gemacht hat, wenn Du nicht mal weißt, was Du selbst eigentlich willst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Sonntag, 6. Oktober 2019 14:27
    Moderator
  • Was ich will, weiß ich:

    Ich möchte die Klassen integrieren, die mir der Webservice zur Verfügung stellt, die mittels folgender Dateien zur Verfügung gestellt werden:

    • C:\Users\tklustig\Desktop\starschemas-5.10.2\STAR\5.10.2\WSDL\WS4Templates\ProcessRetailDeliveryReporting.wsdl
    • C:\Users\tklustig\Desktop\starschemas-5.10.2\STAR\5.10.2\Resources\Nouns\ProcessRetailDeliveryReporting.xsd

    Die Integration klappt auch, aber es fehlt eine Klasse:

    ESBOLWebserve, so dass ich folgendes Objekt nicht instanzieren kann:

    ESBOLWebservice usvWebservice=new ESBOLWebservice();
    Diese Klasse ist im real exisitierenden Projekt aber enthalten. Sie bietet mir Methoden, die es mir erlauben, BODs als Datenstream von einer beliebigen Maschine(Zertifikate und Authentifzierung vorausgesetzt) an den Server zu verschicken. Alle anderen Klassen bieten mir nur die Möglichkeit, die BOD gemäß der Spezifikation valide zu erstellen.






    • Bearbeitet tklustig Montag, 7. Oktober 2019 17:35
    Montag, 7. Oktober 2019 17:26
  • Hi,

    dann fehlt die Klasse wohl in der WSDL und Du musst sie manuell erstellen. In der Doku sollte stehen, wie sie auszusehen hat.

    Alternativ kannst Du auch mal probieren, die Proxyklassen über den Webservice Assistenten im Visual Studio generieren zu lassen.

    Wie man einen Dienstverweis hinzufügt, weißt Du ja (siehe einen deiner anderen Threads Webservice(wsdl) lässt sich nicht einbinden). Gib dort mal die http Adresse des aufrufbaren Webservice ein. Ggfs. wird die entsprechende Klasse dann generiert. Falls nicht, musst Du die halt selbst aufbauen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 7. Oktober 2019 18:16
    Moderator
  • Nun hat's Klick gemacht. Zumindest weiß ich jetzt, wozu die WebService implementiert wurden, die doch anscheinend gar nix anbieten. Und ob sie was anbieten. Sie bieten genau diejenigen Klassen, die ich für den Versand der BOD als Datenstream benötige. Wie der serverseitige  Webservice generiert wurde, das weiß ich leider immer noch nicht. Da steht

    // 
    // Dieser Quellcode wurde automatisch generiert von wsdl, Version=4.0.30319.33440.
    // 

    Wie kann man diesen Serverdienst automatisch erzeugen lassen? Die wsdl benötige ich für die Generierung der "Proxyklassen über den Webservice Assistenten im Visual Studio" Wozu nutzt man die wie noch? Welches Tool könnte dafür benutzt worden sein?

    Hier der Inhalt besagter Klasse(EsbolWebService.asmx)

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     Dieser Code wurde von einem Tool generiert.
    //     Laufzeitversion:4.0.30319.42000
    //
    //     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
    //     der Code erneut generiert wird.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    using Microsoft.Web.Services3;
    using Microsoft.Web.Services3.Design;
    using Microsoft.Web.Services3.Security;
    using Microsoft.Web.Services3.Security.Tokens;
    using System;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.IO;
    using System.Text;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Xml;
    using System.Xml.Serialization;
    
    // 
    // Dieser Quellcode wurde automatisch generiert von wsdl, Version=4.0.30319.33440.
    // 
    
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.33440")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name = "starTransport", Namespace = "http://www.starstandards.org/webservices/2005/10/transport/bindings")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(NewFinancingType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CurrentFinancingType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ChildBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ContactBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AddressBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AlternatePartyIdType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(PartyBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceContractBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RentLoanerBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceCampaignType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CodesAndCommentsBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceLaborBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(WarrantyBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(OptionBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(VehicleType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(HeaderBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ResponseCodeType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TimePeriodABIEType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StatusBasisType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(VerbType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SenderBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BusinessObjectDocumentType))]
    public partial class ESBOLWebService : Microsoft.Web.Services3.WebServicesClientProtocol //System.Web.Services.Protocols.SoapHttpClientProtocol
    {
        private PayloadManifest payloadManifestField;
    
        private System.Threading.SendOrPostCallback ProcessMessageOperationCompleted;
    
        private System.Threading.SendOrPostCallback PutMessageOperationCompleted;
    
        private System.Threading.SendOrPostCallback PullMessageOperationCompleted;
    
        /// <remarks/>
        public ESBOLWebService()
        {
            this.Url = "http://localhost:52281/ESBOLWebService.asmx"; // "https://b2dgwdev.ford.com/5027/StarTransport"
        }
    
        public PayloadManifest payloadManifest
        {
            get
            {
                return this.payloadManifestField;
            }
            set
            {
                this.payloadManifestField = value;
            }
        }
    
        /// <remarks/>
        public event ProcessMessageCompletedEventHandler ProcessMessageCompleted;
    
        /// <remarks/>
        public event PutMessageCompletedEventHandler PutMessageCompleted;
    
        /// <remarks/>
        public event PullMessageCompletedEventHandler PullMessageCompleted;
    
        /// <remarks/>
        [System.Web.Services.Protocols.SoapHeaderAttribute("payloadManifest", Direction = System.Web.Services.Protocols.SoapHeaderDirection.InOut)]
        [System.Web.Services.WebMethod]
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.starstandards.org/webservices/2005/10/transport/operations/ProcessMess" +
            "age", RequestNamespace = "http://www.starstandards.org/webservices/2005/10/transport", ResponseNamespace = "http://www.starstandards.org/webservices/2005/10/transport", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        [return: System.Xml.Serialization.XmlElementAttribute("payload")]
        public AcknowledgeRetailDeliveryReportingPayload ProcessMessage(ProcessRetailDeliveryReportingPayload payload)
        {
            object[] results = this.Invoke("ProcessMessage", new object[] {
                        payload});
    
            return ((AcknowledgeRetailDeliveryReportingPayload)(results[0]));
        }
    .
    .
    .



    • Bearbeitet tklustig Mittwoch, 9. Oktober 2019 16:37
    Mittwoch, 9. Oktober 2019 16:32
  • Hi,

    Wie der serverseitige  Webservice generiert wurde, das weiß ich leider immer noch nicht. Da steht
    // Dieser Quellcode wurde automatisch generiert von wsdl, Version=4.0.30319.33440.

    das ist nicht der serverseitige Webservice, sondern eine der Proxyklassen, die für die Ansteuerung eines Webservice vom Visual Studio Assistenten erzeugt wurden.

    Wie kann man diesen Serverdienst automatisch erzeugen lassen?

    Gar nicht.

    Wozu nutzt man die wie noch? Welches Tool könnte dafür benutzt worden sein?

    Die Frage verstehe ich nicht. In dem oben verlinkten Thread (der von dir selbst stammt) sieht man doch recht deutlich, dass das über "Dienstverweis hinzufügen" gemacht wurde!? Oder was genau meinst Du mit deiner Frage?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 10. Oktober 2019 08:02
    Moderator