Sie können den Dienst an zwei verschiedenen Endpunkten bereitstellen. Der SOAP-Endpunkt kann die Bindung verwenden, die SOAP unterstützt, z. B. basicHttpBinding, der RESTful-Endpunkt kann die webHttpBindung verwenden. Ich nehme an, dass Ihr REST-Dienst in JSON sein wird. In diesem Fall müssen Sie die beiden Endpunkte mit der folgenden Verhaltenskonfiguration konfigurieren
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
Ein Beispiel für die Endpunktkonfiguration in Ihrem Szenario ist
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" contract="ITestService"/>
</service>
</services>
Der Dienst wird also verfügbar sein unter
Wenden Sie [WebGet] auf den Operationsvertrag an, um ihn RESTful zu machen. z.B.
public interface ITestService
{
[OperationContract]
[WebGet]
string HelloWorld(string text)
}
Hinweis: Wenn der REST-Dienst nicht in JSON vorliegt, können die Parameter der Vorgänge keinen komplexen Typ enthalten.
Antwort auf den Beitrag für SOAP und RESTful POX(XML)
Für einfaches altes XML als Rückgabeformat ist dies ein Beispiel, das sowohl für SOAP als auch für XML funktionieren würde.
[ServiceContract(Namespace = "http://test")]
public interface ITestService
{
[OperationContract]
[WebGet(UriTemplate = "accounts/{id}")]
Account[] GetAccount(string id);
}
POX-Verhalten für REST Einfaches XML
<behavior name="poxBehavior">
<webHttp/>
</behavior>
Endpunkte
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
</services>
Der Dienst wird verfügbar sein unter
REST-Anfrage versuchen Sie es im Browser,
http://www.example.com/xml/accounts/A123
SOAP-Anfrage Client-Endpunktkonfiguration für den SOAP-Dienst nach Hinzufügen der Dienstreferenz,
<client>
<endpoint address="http://www.example.com/soap" binding="basicHttpBinding"
contract="ITestService" name="BasicHttpBinding_ITestService" />
</client>
in C#
TestServiceClient client = new TestServiceClient();
client.GetAccount("A123");
Eine andere Möglichkeit besteht darin, zwei verschiedene Dienstverträge mit jeweils spezifischer Konfiguration bereitzustellen. Dies kann zu einigen Duplikaten auf Code-Ebene führen, aber am Ende des Tages wollen Sie ja, dass es funktioniert.
1 Stimmen
Gute Frage und tolle Antworten.