Erstellen von interoperablen WS-I Basic Profile 1.1-Diensten
So konfigurieren Sie einen WCF-Dienstendpunkt, sodass er mit ASP.NET-Webdienstclients interoperabel ist:
Verwenden Sie den System.ServiceModel.BasicHttpBinding-Typ als Bindungstyp für den Dienstendpunkt.
Verwenden Sie für den Dienstendpunkt keine Rückruf- und Sitzungsvertragsfunktionen oder Transaktionsverhalten.
Sie können für die Bindung auch Unterstützung für HTTPS und Clientauthentifizierung auf Transportebene aktivieren.
Die folgenden Funktionen der BasicHttpBinding-Klasse erfordern Funktionalität jenseits von WS-I Basic Profiles 1.1:
MTOM-Meldungscodierung (Message Transmission Optimization Mechanism), die von der System.ServiceModel.BasicHttpBinding.MessageEncoding-Eigenschaft gesteuert wird. Behalten Sie für diese Eigenschaft den Standardwert bei, der System.ServiceModel.WSMessageEncoding.Text ist, was bedeutet, dass kein MTOM verwendet wird.
Meldungssicherheit, die vom System.ServiceModel.BasicHttpBinding.Security-Wert gesteuert wird, stellt WS-Sicherheit bereit, die mit WS-I Basic Security Profile 1.0 kompatibel ist. Behalten Sie für diese Eigenschaft den Standardwert System.ServiceModel.SecurityMode.Transport bei, d. h. es wird keine WS-Sicherheit verwendet.
Um die Metadaten eines WCF-Diensts für ASP.NET verfügbar zu machen, verwenden Sie die Webdienstclientgenerierungstools: Web Services Description Language Tool (Wsdl.exe), Web Services Discovery Tool (Disco.exe) und die Funktion Webverweis hinzufügen in Visual Studio. Sie müssen die Metadatenveröffentlichung aktivieren. Weitere Informationen finden Sie unter Veröffentlichen von Metadatenendpunkten.
Beispiel
Beschreibung
Der folgende Beispielcode demonstriert das Hinzufügen eines WCF-Endpunkts, der kompatibel mit den ASP.NET-Webdienstclients ist, im Code und alternativ in Konfigurationsdateien.
Code
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.ServiceModel
Imports System.ServiceModel.Description
<ServiceContract()> _
Public Interface IEcho
<OperationContract()> _
Function Echo(ByVal s As String) As String
End Interface
Public Class MyService
Implements IEcho
Public Function Echo(ByVal s As String) As String Implements IEcho.Echo
Return s
End Function
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim baseAddress = "https://localhost:8080/wcfselfhost/"
Dim host As New ServiceHost(GetType(MyService), _
New Uri(baseAddress))
' Add a service endpoint using the created binding
With host
.AddServiceEndpoint(GetType(IEcho), _
New BasicHttpBinding(), _
"echo1")
.Open()
Console.WriteLine("Service listening on {0} . . .", _
baseAddress)
Console.ReadLine()
.Close()
End With
End Sub
End Class
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
[ServiceContract]
public interface IEcho
{
[OperationContract]
string Echo(string s);
}
public class MyService : IEcho
{
public string Echo(string s)
{
return s;
}
}
class Program
{
static void Main(string[] args)
{
string baseAddress = "https://localhost:8080/wcfselfhost/";
ServiceHost host = new ServiceHost(typeof(MyService), new Uri(baseAddress));
// Create a BasicHttpBinding instance
BasicHttpBinding binding = new BasicHttpBinding();
// Add a service endpoint using the created binding
host.AddServiceEndpoint(typeof(IEcho), binding, "echo1");
host.Open();
Console.WriteLine("Service listening on {0} . . .", baseAddress);
Console.ReadLine();
host.Close();
}
}
<configuration>
<system.serviceModel>
<services>
<service name="MyService" behaviorConfiguration="HttpGetMetadata">
<endpoint address="echo2" contract="IEcho" binding="basicHttpBinding" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="HttpGetMetadata">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>