So che questo è stato picchiato a morte, ma non riesco a farlo funzionare come dovrebbe. Ho un servizio WCF con diversi contratti. Tutti funzionano bene quando li chiamano direttamente, ad es. http://merlin.com/CompanyServices/CompanyWcfService.svc/Get_Document_Dates_Received/223278 Ho usato questo servizio WCF con successo su InfoPath Forms e Nintex Workflow. Ora creo una semplice applicazione ASP.Net, come è stata fatta in http://www.webcodeexpert.com/2013/04/how-to-create-and-consume-wcf-services.html. Sono stato in grado di aggiungere un riferimento al servizio come descritto nell'articolo. Ho aggiunto un pulsante di forma, e ha aggiunto il seguente codice nel Button1_Click
evento:Impossibile trovare l'elemento endpoint predefinito che fa riferimento al contratto
protected void Button1_Click(object sender, EventArgs e)
{
ServiceReference1.CompanyWcfServiceClient x = new ServiceReference1.CompanyWcfServiceClient();
var result = x.Get_Document_Dates_Received("223278");
}
quando clicco sul pulsante ottengo l'errore:
"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."
Così ho provato ad aggiungere quanto segue a web.config:. (copiato direttamente dal file web.config del CompanyWcfService
<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>
ottengo lo stesso errore esatto, ci deve essere qualcosa d'altro goin g on.
fine ho rinunciato e chiamato il servizio come questo:
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 = "";
}
Ho passato ore a leggere i messaggi e la maggior parte di loro suggerisce per copiare le informazioni di configurazione nel file web.config. Questo mi sembra problematico (oltre al fatto che non sembra funzionare). Cosa succede se ho bisogno di consumare un servizio WCF di terzi? Devo richiedere le informazioni di configurazione dalla terza parte? E Visa Versa, se creo un servizio WCF progettato per essere consumato da terze parti, devo fornire anche il file di configurazione?
Inoltre. Nella sezione system.ServiceModel della tua app web.config non dovresti aver bisogno della sezione servizi. Lo cancellerei. Hai solo bisogno di elementi definiti di riferimento nella sezione client. Come le impostazioni di configurazione o associazione del comportamento, se personalizzato. –
Matt, grazie per la risposta. Scusa però, ho ancora lo stesso errore. – user1337493
Questo problema sembra essere una mancata corrispondenza tra il servizio e il web.config nell'applicazione. L'errore indica che non è possibile trovare un servizio con il contratto "ServiceReference1.ICompanyWcfService". Nota nel tuo web.config nell'app web il contratto è "CompanyWcfServices.ICompanyWcfService". Hai per caso creato un servizio, aggiungi un riferimento nella tua app Web e poi cambia lo spazio dei nomi del servizio? –