WCF Rest-Service: Unterschied zwischen den Versionen

Aus maxTechCorner
Keine Bearbeitungszusammenfassung
imported>TechCorner-Redaktion
Softwareentwicklung: Überarbeitung
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
==='''Aufgabenstellung'''===
== Aufgabenstellung ==
Einen WCF-Service mit REST/JSON-Funktionalität versehen: Der WCF-Service.
Einen WCF-Service mit REST/JSON-Funktionalität versehen.
==='''Lösung'''===
 
Mit der Hilfe von WCF-Attributen kann aus einem normalen SOAP-Service mit WCF ein WCF-Service mit REST/JSON-Funktionalität erstellt werden. Anschließend muss noch die Konfigurationsdatei des Service ein wenig angepasst werden. Als Ausgangspunkt nehmen wir einen normalen SOAP-Service mit einer einfachen Methode.
{{Hinweis|WCF ist eine ältere .NET-Framework-Technologie. In modernem .NET (Core/5+) werden REST-Services üblicherweise mit ASP.NET Core Web API umgesetzt. Das Beispiel wurde mit .NET 4.5 erstellt.}}
'''Projekt-Mappe SOAP-Service:'''
 
[[Datei: WCF_Service.jpg.png|left|thumb|400px]]
== Lösung ==
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
Aus einem SOAP-Service wird per WCF-Attributen ein REST/JSON-Service. Ausgangspunkt ist ein einfacher SOAP-Service.
'''ISimpleService:'''
 
<pre>[ServiceContract]
[[Datei:WCF_Service.jpg.png|thumb|left|400px|Projektmappe SOAP-Service]]<br clear="all" />
'''ISimpleService (SOAP):'''
<syntaxhighlight lang="csharp">
[ServiceContract]
public interface ISimpleService
public interface ISimpleService
{
{
[OperationContract]
    [OperationContract]
        string GetSimpleData(int id);
    string GetSimpleData(int id);
}
}
</pre>
</syntaxhighlight>
'''SimpleService:'''
'''Interface um WCF-Attribute erweitern (REST):'''
<pre> public class SimpleService : ISimpleService
<syntaxhighlight lang="csharp">
{
[ServiceContract]
public string GetSimpleData(int id)
        {
            return string.Format("Folgende Id wurde übergeben: {0}", id);
        }
}
</pre>
Für die Verwandlung in einen REST-Service wird die Interface-Klasse um WCF-Attribute erweitert.<br /><br />
'''Projekt-Mappe REST-Service:'''
[[Datei: WCF_Service_2.png|left|thumb|400px]]
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
'''ISimpleService:'''
<pre> [ServiceContract]
[WebInvoke(UriTemplate = "getsimpledata?id={id}", Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
public interface ISimpleService
public interface ISimpleService
{
{
[OperationContract]
    [OperationContract]
        string GetSimpleData(int id);
    [WebInvoke(UriTemplate = "getsimpledata?id={id}", Method = "GET",
              RequestFormat = WebMessageFormat.Json,
              ResponseFormat = WebMessageFormat.Json)]
    string GetSimpleData(int id);
}
}
</pre>
</syntaxhighlight>
'''UriTemplate'''- getsimpledata?id={id}: Das UriTemplate besteht aus Pfad und Abfrage-Parameter.<br />
'''ResponseFormat'''- WebMessageFormat.Json -> Die Daten werden im JSON-Format zurückgegeben.<br />
<br />
'''SimpleService:'''
'''SimpleService:'''
<pre> public class SimpleService : ISimpleService
<syntaxhighlight lang="csharp">
public class SimpleService : ISimpleService
{
{
public string GetSimpleData(int id)
    public string GetSimpleData(int id)
        {
    {
            return string.Format("Folgende Id wurde übergeben: {0}", id);
        return string.Format("Folgende Id wurde uebergeben: {0}", id);
        }
    }
}
}
</pre>
</syntaxhighlight>
Anschließend muss die web.config noch angepasst werden.<br />
'''web.config anpassen:'''
<br />
<syntaxhighlight lang="xml">
'''web.config:'''
<system.serviceModel>
<pre> <system.serviceModel>
  <services>
    <services>
    <service name="SimpleWCFRestService.SimpleService" behaviorConfiguration="serviceBehavior">
      <service name="SimpleWCFRestService.SimpleService" behaviorConfiguration="serviceBehavior">
      <endpoint address="" binding="webHttpBinding" contract="SimpleWCFRestService.ISimpleService" behaviorConfiguration="Web" />
        <endpoint address="" binding="webHttpBinding" contract="SimpleWCFRestService.ISimpleService"       behaviorConfiguration="Web">
    </service>
        </endpoint>
  </services>
      </service>
  <behaviors>
    </services>
    <serviceBehaviors>
    <behaviors>
      <behavior name="serviceBehavior">
      <serviceBehaviors>
        <serviceMetadata httpGetEnabled="true"/>
        <behavior name="serviceBehavior">
        <serviceDebug includeExceptionDetailInFaults="false"/>
          <serviceMetadata httpGetEnabled="true"/>
      </behavior>
          <serviceDebug includeExceptionDetailInFaults="false"/>
    </serviceBehaviors>
        </behavior>
    <endpointBehaviors>
      </serviceBehaviors>
      <behavior name="Web"><webHttp /></behavior>
      <endpointBehaviors>
    </endpointBehaviors>
        <behavior name="Web">
  </behaviors>
          <webHttp />
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</system.serviceModel>
</pre>
</syntaxhighlight>
So jetzt ist es soweit: Aus dem SOAP-Service ist ein REST-Service geworden, der die Daten im JSON-Format zurückgibt.<br />
'''Aufruf und Antwort:'''
<br />
<syntaxhighlight lang="text">
'''Aufruf REST-Service:'''
GET http://localhost:49880/SimpleService.svc/getsimpledata?id=123456789
<pre> http://localhost:49880/SimpleService.svc/getsimpledata?id=123456789 </pre>
'''Antwort im JSON-Format:'''
<pre>"Folgende Id wurde übergeben: 123456789"</pre>
Hinweis: Das Beispiel zur Erläuterung der Vorgehensweise wurde mit .NET 4.5 erstellt.
==='''Weitere Informationen'''===
https://www.max-it.de/techcorner/WCF_Rest-Service


=== '''Kontakt''' ===
"Folgende Id wurde uebergeben: 123456789"
Wenn Sie Fragen oder Anmerkungen zu diesem Artikel haben, melden Sie sich bitte bei uns: mailto:techcorner@max-it.de.<br />
</syntaxhighlight>


Über m.a.x. Informationstechnologie AG: <br />
== Unterstützung von m.a.x. it ==
Als etabliertes Münchner Systemhaus zeichnen wir uns seit 1989 als verlässlicher IT-Partner mittelständischer und großer Unternehmen aus. Unser Portfolio reicht von IT- Services über individuelle Softwareentwicklung bis hin zur ERP-Beratung.<br />
Bei plattformübergreifender App- und Software­entwicklung unterstützt Sie m.a.x. it mit [https://www.max-it.de/development/individuelle-softwareentwicklung/ individueller Softwareentwicklung].
=== '''Tags''' ===
.NET, C#, WCF, REST


{{Uebermax}}
[[Kategorie:Softwareentwicklung]]


[[Kategorie: Softwareentwicklung]]

Aktuelle Version vom 15. September 2026, 00:00 Uhr

Aufgabenstellung

Einen WCF-Service mit REST/JSON-Funktionalität versehen.


HinweisWCF ist eine ältere .NET-Framework-Technologie. In modernem .NET (Core/5+) werden REST-Services üblicherweise mit ASP.NET Core Web API umgesetzt. Das Beispiel wurde mit .NET 4.5 erstellt.

Lösung

Aus einem SOAP-Service wird per WCF-Attributen ein REST/JSON-Service. Ausgangspunkt ist ein einfacher SOAP-Service.

Projektmappe SOAP-Service


ISimpleService (SOAP):

[ServiceContract]
public interface ISimpleService
{
    [OperationContract]
    string GetSimpleData(int id);
}

Interface um WCF-Attribute erweitern (REST):

[ServiceContract]
public interface ISimpleService
{
    [OperationContract]
    [WebInvoke(UriTemplate = "getsimpledata?id={id}", Method = "GET",
               RequestFormat = WebMessageFormat.Json,
               ResponseFormat = WebMessageFormat.Json)]
    string GetSimpleData(int id);
}

SimpleService:

public class SimpleService : ISimpleService
{
    public string GetSimpleData(int id)
    {
        return string.Format("Folgende Id wurde uebergeben: {0}", id);
    }
}

web.config anpassen:

<system.serviceModel>
  <services>
    <service name="SimpleWCFRestService.SimpleService" behaviorConfiguration="serviceBehavior">
      <endpoint address="" binding="webHttpBinding" contract="SimpleWCFRestService.ISimpleService" behaviorConfiguration="Web" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="serviceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="Web"><webHttp /></behavior>
    </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Aufruf und Antwort:

GET http://localhost:49880/SimpleService.svc/getsimpledata?id=123456789

"Folgende Id wurde uebergeben: 123456789"

Unterstützung von m.a.x. it

Bei plattformübergreifender App- und Software­entwicklung unterstützt Sie m.a.x. it mit individueller Softwareentwicklung.


Über m.a.x. it Die m.a.x. Informationstechnologie AG ist seit über 30 Jahren IT-Partner mittelständischer und großer Unternehmen in München und bietet maßgeschneiderte Lösungen und Services in den Bereichen Cloud, Cybersecurity, Netzwerk, Windows, Linux und Softwareentwicklung. Sie haben eine Frage zu diesem Artikel oder brauchen Unterstützung? Kontakt aufnehmen