2013-07-11 13 views
12

verweist, konnte ich nicht finden. Ich weiß, dass dies zu Tode geprügelt wurde, aber ich kann nicht so funktionieren, wie es sollte. Ich habe einen WCF-Dienst mit mehreren Verträgen. Sie alle funktionieren gut, wenn sie direkt, z.B. http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278 Ich habe diesen WCF-Dienst erfolgreich für InfoPath Forms und Nintex-Workflows verwendet. Jetzt erstelle ich eine einfache ASP.Net-Anwendung, wie in 10 getan wurde. Ich konnte eine Service-Referenz wie in dem Artikel beschrieben hinzufügen. Ich habe das Formular auf eine Schaltfläche, und hinzugefügt, um den folgenden Code in das Button1_Click Ereignis:Das Standardendpunktelement, das auf Vertrag

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 den Button klicken erhalte ich die Fehlermeldung:

"Could not find default endpoint element that references contract 'ServiceReference1.ICompanyWcfService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element."

Also habe ich versucht, den folgenden zu die web.config. (direkt aus der Datei web.config 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 exakt das gleiche Fehlermeldung erhalten, muss es etwas anderes sein goin g auf.

Schließlich gab ich auf und den Dienst wie folgt aufgerufen:

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 Stunden Beiträge verbracht haben, und die meisten von ihnen zu lesen schlagen die Konfigurationsinformationen an die web.config-Datei zu kopieren. Dies erscheint mir problematisch (neben der Tatsache, dass es nicht zu funktionieren scheint). Was ist, wenn ich einen WCF-Service eines Drittanbieters in Anspruch nehmen muss? Muss ich die Konfigurationsinformationen von der dritten Partei anfordern? Und wenn ich einen WCF-Dienst entwerfe, der von Dritten genutzt werden soll, muss ich dann auch die Konfigurationsdatei bereitstellen?

Antwort

15

Der Fehler weist darauf hin, dass im Abschnitt Clientkonfiguration kein Endpunkt definiert ist. Wenn Sie die Service-Referenz zu Ihrem Projekt hinzufügen, sollte sie den Client-Abschnitt für Sie erstellen. Wenn nicht, dann in der web.config für Ihre App im system.serviceModel Abschnitt fügen Sie den folgenden

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

Auch. Im Abschnitt system.ServiceModel in Ihrer App web.config sollten Sie den Abschnitt services nicht benötigen. Ich würde das löschen. Sie müssen nur Artikel definieren, auf die im Kundenbereich verwiesen wird. Wie die Einstellungen für behaviorConfiguration oder binding, wenn Sie angepasst haben. –

+0

Matt, danke für die Antwort. Tut mir leid, aber ich bekomme immer noch den gleichen Fehler. – user1337493

+0

Dieses Problem scheint dann eine Diskrepanz zwischen dem Dienst und der web.config in der Anwendung zu sein. Der Fehler weist darauf hin, dass ein Service mit dem Vertrag 'ServiceReference1.ICompanyWcfService' nicht gefunden werden konnte. Beachten Sie in Ihrer web.config in der Web-App den Vertrag "CompanyWcfServices.ICompanyWcfService". Haben Sie zufällig einen Service erstellt, einen Verweis in Ihre Web App hinzugefügt und dann den Service-Namespace geändert? –

9

Wenn wir geschichtete Architektur müssen 1) stellen Sie sicher, app.config in „allen Projekten“ 2) hinzufügen Hinzufügen von Service-Konfigurationsdetails in allen app.config 3) führen Sie das Projekt

+0

Danke für die Erinnerung! :) – user1477388

1

Eigentlich der Trick zu diesem einen war die Verwendung der svcutil.exe, um den Proxy zu erstellen. Ich hatte versucht, den Proxy durch Visual Studio "Add Service" -Assistenten zu erstellen. Sobald ich das getan habe, war die Konfiguration ein Kinderspiel.

SvcUtil.exe

7

Wenn Ihr Projekt eine Bibliothek verweist und versuchen, die WCF-Funktionen von den Funktionen dieser Bibliothek zu verwenden, versuchen Sie können dann den Client-Endpunkt Kopieren aus der Projekt-Konfigurationsdatei auf die Config-Datei dll. So etwas passierte mir vor einiger Zeit, da die Bibliothek, auf die ich im Projekt referenzierte, nicht die Projektkonfigurationsdatei (in der der Clientendpunkt konfiguriert wurde, seit der Dienst dort referenziert wurde) verwendete, sondern sein eigenes Ergebnis Das System konnte die Endpunktkonfigurationen nicht finden.

+0

Gleiches hier - in meinem Fall war es ein Testprojekt, das auf eine geteilte Funktion in meinem Hauptprojekt verweist. Die referenzierte app.config war diejenige im Testprojekt, nicht das Hauptprojekt. Vielen Dank! – Jeff

2

Binding und Client-Werte von app.config zu Standard web.config hinzugefügt löste mein Problem.

4

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

+0

Danke! Das war das gleiche Problem, das ich hatte – Chance

Verwandte Themen