it-swarm.com.de

Standardendpunktelement, das auf Vertrag verweist, konnte nicht gefunden werden

Ich weiß, dass dies zu Tode geprügelt wurde, aber ich kann nicht, dass es funktioniert, wie es sollte ... Ich habe einen WCF-Dienst mit mehreren Verträgen ... Sie alle funktionieren gut, wenn Sie sie direkt anrufen, z. http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278 Ich habe diesen WCF-Dienst erfolgreich auf InfoPath Forms und Nintex-Workflows verwendet. Jetzt erstelle ich eine einfache ASP.Net-Anwendung , wie es in http://www.webcodeexpert.com/2014/04/wie- zu-erstellen-und-konsum-wcf-services.html ..__ getan wurde. Ich konnte einen Dienst hinzufügen Referenz wie in Artikel .. beschrieben .. Ich fügte dem Formular eine Schaltfläche hinzu und fügte dem Button1_Click-Ereignis den folgenden Code hinzu:

protected void Button1_Click(object sender, EventArgs e)
{
    ServiceReference1.CompanyWcfServiceClient x = new ServiceReference1.CompanyWcfServiceClient();
    var result = x.Get_Document_Dates_Received("223278");
}

wenn ich auf die Schaltfläche klicke, erhalte ich die Fehlermeldung: 

"Das Standardendpunktelement, das auf den Vertrag 'ServiceReference1.ICompanyWcfService' verweist, konnte im Abschnitt zur Konfiguration des ServiceModel-Clients nicht gefunden werden. Dies kann daran liegen, dass keine Konfigurationsdatei für Ihre Anwendung gefunden wurde oder kein Endpunktelement gefunden wurde, das mit diesem Vertrag übereinstimmt . "

Also habe ich versucht, der web.config Folgendes hinzuzufügen: (direkt aus der web.config-Datei des CompanyWcfService kopiert.

<system.serviceModel>
<services>
  <service name="CompanyWcfServices.CompanyWcfService" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="webHttpBinding" contract="CompanyWcfServices.ICompanyWcfService" behaviorConfiguration="webHttpEndpointBehavior" >
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">                                                                
    </endpoint>
  </service>
</services>
<bindings>
  <webHttpBinding>
    <binding>
      <security mode="None">
      </security>
    </binding>
  </webHttpBinding>
</bindings>
<behaviors>
  <endpointBehaviors>
    <behavior name ="webHttpEndpointBehavior">
      <webHttp helpEnabled ="true" faultExceptionEnabled="true" automaticFormatSelectionEnabled="true"/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>

Ich bekomme den gleichen Fehler, es muss noch etwas anderes passieren.

Ich gab schließlich auf und rief den Dienst so an:

HttpWebRequest request = WebRequest.Create(@"http://merlin/Companyservices/CompanyWcfService.svc/Get_Document_Dates_Received/223278") as HttpWebRequest;
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = null;

var result = "";
try
{
    response = request.GetResponse() as HttpWebResponse;
    if (response.StatusCode == HttpStatusCode.OK)
    {
        using (Stream stream = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
            result = reader.ReadToEnd();
        }
    }
}
catch (Exception ex)
{
    result = "";
}

Ich habe Stunden damit verbracht, Beiträge zu lesen, und die meisten von ihnen schlagen vor, die Konfigurationsinformationen in die Datei web.config zu kopieren. Dies scheint mir problematisch zu sein (abgesehen davon, dass es scheinbar nicht funktioniert). Was ist, wenn ich einen WCF-Dienst eines Drittanbieters in Anspruch nehmen muss? Muss ich die Konfigurationsinformationen vom Dritten anfordern? Und Visa Versa, wenn ich einen WCF-Dienst erzeuge, der für Dritte bestimmt ist. Muss ich ihm auch die Konfigurationsdatei zur Verfügung stellen?

12
user1337493

Der Fehler weist darauf hin, dass im Client-Konfigurationsabschnitt kein Endpunkt definiert ist. Wenn Sie Ihrem Projekt die Servicereferenz hinzufügen, sollte der Clientabschnitt für Sie erstellt werden. Wenn nicht, fügen Sie in der web.config für Ihre App im Abschnitt system.serviceModel Folgendes hinzu

<client>
  <endpoint 
      name="CompanyWcfService_webhttpBinding"
      address="http://merlin.com/CompanyServices/CompanyWcfService.svc" 
      binding="webHttpBinding" 
      contract="CompanyWcfServices.ICompanyWcfService" 
      behaviorConfiguration="webHttpEndpointBehavior"
  />
</client>
16
Matt Klepeis

Wenn wir mehrschichtige Architektur haben, stellen Sie sicher, dass

1) add app.config in "all projects"
2) add service config details in all app.config
3) run the project
11
Anand

Wenn Ihr Projekt auf eine Bibliothek verweist und versucht, die WCF-Funktionen aus den Funktionen dieser Bibliothek zu verwenden, können Sie versuchen, den Client-Endpunkt aus der Konfigurationsdatei des Projekts in die Konfigurationsdatei der DLL zu kopieren. Etwas wie dieses ist mir vor einiger Zeit passiert, da die Bibliothek, auf die ich im Projekt verwiesen habe, die Projektkonfigurationsdatei (in der der Clientendpunkt konfiguriert wurde, da der Dienst dort referenziert wurde) nicht verwendet hat Das System konnte die Endpunktkonfigurationen nicht finden. 

7
AbbasFaisal

In meinem Fall hatte ich ein WPF-Projekt, das auf ein externes UserControl verwies, das eine Servicereferenz hatte. Ich musste die Servicereferenz auch zum Hauptprojekt hinzufügen.

4

Das Hinzufügen von Bindungs- und Clientwerten aus der app.config zur Standard-web.config hat mein Problem behoben.

2
user1501363

Tatsächlich bestand der Trick darin, den Proxy mit der Datei svcutil.exe zu erstellen. Ich hatte versucht, den Proxy mithilfe des Assistenten zum Hinzufügen von Diensten in Visual Studio zu erstellen. Nachdem ich das getan hatte, war die Konfiguration ein Kinderspiel.

SvcUtil.exe

1
user1337493

Wenn es sich um WCF handelt, muss die Konfiguration normalerweise in der Konfigurationsdatei der ausführbaren Datei definiert werden, die sie aufruft.

Wenn Sie also das Pech haben, eine WCF DLL aus einem VB6-Programm heraus aufrufen zu müssen (wie dies beispielsweise bei Verwendung eines COM-Interop .NET-Moduls der Fall ist), müssen Sie die VB6 debuggen Programm, dann müssen Sie eine VB6.exe.config-Datei in dem Verzeichnis erstellen, in dem sich VB6.exe befindet.

Andernfalls kann dies dazu führen, dass ein Standardendpunktelement, das auf einen Vertrag verweist, nicht gefunden wurde.

Als Problemumgehung können Sie die Konfigurationsdatei der DLL zur Laufzeit laden und dann den Konstruktor des verwendeten Service mit einer Bindung und einer EndpointAddress als Parameter aufrufen (die aus der Konfiguration der DLL abgerufen wird).

0