WCF InvalidOperationException: Eine verbindliche Instanz hat bereits in Verbindung gebracht worden zu hören, URI
Ich bin ein Anfänger der WCF und ich studiere im Wesentlichen WCF.
Stieß ich auf ein problem bei der Verwendung von ServiceContract NameSpace und den Namen.
wenn ich den code ausführen, ich Fang unten InvalidOperationException. Aber ich konnte es nicht klar verstehen.
Eine verbindliche Instanz hat bereits in Verbindung gebracht worden zu hören, URI 'http://localhost:8080/NamespaceChange01'. Wenn zwei Endpunkte teilen wollen, die gleichen ListenUri, müssen Sie auch die gleiche binding-Objekt-Instanz. Die beiden entgegengesetzten Endpunkte wurden entweder angegeben in AddServiceEndpoint () - Aufrufe, die in einer config-Datei, oder eine Kombination von AddServiceEndpoint() und config.
Wer weiß, wie avide der InvalidOperationException ?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace NamespaceChange01
{
[ServiceContract(Name = "MyServiceName", Namespace = "http://ServiceNamespace")]
public interface IBurgerMaster
{
[return: MessageParameter(Name = "myOutput")]
[OperationContract(Name = "OperationName", Action = "OperationAction", ReplyAction = "ReplyActionName")]
double GetStockPrice(string ticker);
}
[ServiceBehavior(Namespace = "http://MyService")]
public class BurgerMaster : IBurgerMaster
{
public double GetStockPrice(string ticker)
{
return 100.99;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(BurgerMaster));
host.Open();
Console.ReadLine();
host.Close();
}
}
}
-
app.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="NamespaceChange01.BurgerMaster" behaviorConfiguration="mexServiceBehavior"> <host> <baseAddresses> <add baseAddress="http://localhost:8080/NamespaceChange01"/> </baseAddresses> </host> <endpoint name="basic" binding="basicHttpBinding" contract="NamespaceChange01.IBurgerMaster"/> <endpoint name="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="mexServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beiden Endpunkte (basic und mex) konnte nicht auf die gleiche Adresse. Fügen Sie einige spezielle Adresse für eine von Ihnen (oder beide sind).
Beispiel:
Ihnen fehlt die Adresse Attribut aus Ihrer Metadaten-Endpunkt:
Ohne WCF denkt, dass Sie wollen, um host-mex-Endpunkt an der gleichen Adresse.
Während der Erstellung Ihrer service-Klasse, warum haben Sie markieren es mit dem ServiceContract-Attribut, wie dein code sagt?
Bitte entfernen Sie diesen ein und versuchen Sie es erneut.