2013-05-14 1 views
6

Ho una domanda sul modo di accedere alla WCF. Ho creato un servizio WCF sicuro che restituisce i dati da un database e funziona perfettamente. Ora ho bisogno di accedere a questo servizio web tramite MVC (non ho abbastanza conoscenza al riguardo).Come accedere a un servizio WCF in un'applicazione ASP.Net MVC?

Ho controllato domande simili su Stack Overflow ma non ho trovato quello che mi serve. Ho seguito questo link ma come ho detto, WCF restituisce i dati da SQL, collego il mio WCF con SQL e quando ho usato questo esempio non ottengo il risultato previsto.

l'operazione che invoco in MVC e ritorno tipo di dati da SQL

[OperationContract] 
DataSet GetAllbooks(string Title) 

in Homecontrller in MVC ho scritto

ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client(); 
public ActionResult Index() 
{ 
    DataSet ds = obj.GetAllbooks(); 
    ViewBag.AuthorList = ds.Tables[0]; 
    return View(); 
} 

e tenuto ho scritto

 @{ 
    ViewBag.Title = "AuthorList"; 
    } 
    <table> 
    <tr><td>ISBN</td><td>Author</td><td>Price</td></tr> 
    <%foreach (System.Data.DataRow dr in ViewBag.AuthorList.Rows) 
    {%> 
    <tr> 
    <td><%=dr["ISBN"].ToString()%></td>   
    <td><%=dr["Author"].ToString() %></td> 
    <td><%=dr["Price"].ToString() %></td> 
</tr>   
    <% } %> 
</table> 

non ottengo alcun risultato

Anche alcuni servizi forniti da WCF devono accettare input dall'utente come posso farlo

Grazie.

+0

Ciao Sara e benvenuto su StackOverflow. Alla tua domanda manca la quantità richiesta di informazioni per consentire ai membri di aiutarti. Devi includere tutti i messaggi di errore che ricevi e le parti rilevanti del codice che hai già scritto. –

+0

http: // www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx –

risposta

6

Questa è una domanda piuttosto semplice, ma in generale è possibile aggiungere un riferimento al servizio Web e informazioni sul punto finale nel file Web.Config principale, ma ho il sospetto che si stia riscontrando problemi con la chiamata all'URL del servizio WCF, se così ho pubblicato un esempio di una classe generica/wrapper per chiamare i servizi Web WCF in un'applicazione MVC.

Aggiungere il riferimento Web a Visual Studio 2012:

  1. fare clic destro del mouse sul progetto in Esplora soluzioni
  2. Scegliere Aggiungi-> Servizio di riferimento -> fare clic sul pulsante Avanzate ... ->
  3. Quindi fare clic sul pulsante "Aggiungi riferimento Web ..." -> quindi digitare l'indirizzo del servizio Web nella casella dell'URL. Quindi fai clic sulla freccia verde e Visual Studio scoprirà i tuoi servizi Web e li visualizzerà.

Si può già averlo già visto e potrebbe essere sufficiente una classe wrapper generica che rende facile la chiamata del servizio Web WCF in MVC. Ho trovato che usare la classe generica funziona bene. Non posso prendermene il merito; trovato su internet e non c'era alcuna attribuzione. Esiste un esempio completo con codice sorgente scaricabile all'indirizzo http://www.displacedguy.com/tech/powerbuilder-125-wcf-web-services-asp-net-p3 che chiama un servizio Web WCF creato utilizzando PowerBuilder 12.5.Net, ma il processo di chiamata al servizio Web WCF in MVC è lo stesso indipendentemente dal fatto che sia stato creato in Visual Studio o PowerBuilder.

Ecco il codice per una classe wrapper generico per chiamare WCF servizi Web in ASP.NET MVC

Naturalmente non modellare la vostra gestione degli errori dopo il mio esempio incompleto ...

using System; 
using System.ServiceModel; 
namespace LinkDBMvc.Controllers 
{ 
    public class WebService<T> 
    { 
    public static void Use(Action<T> action) 
    { 
     ChannelFactory<T> factory = new ChannelFactory<T>("*"); 
     T client = factory.CreateChannel(); 
     bool success = false; 
     try 
     { 
      action(client); 
      ((IClientChannel)client).Close(); 
      factory.Close(); 
      success = true; 
     } 
     catch (EndpointNotFoundException e) 
     { 
      LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running"); 
     } 
     catch (CommunicationException e) 
     { 
      LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running"); 
     } 
     catch (TimeoutException e) 
     { 
      LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running"); 
     } 
     catch (Exception e) 
     { 
      LinkDBMvc.AppViewPage.apperror.LogError("WebService", e, "Check that the Web Service is running"); 
     } 
     finally 
     { 
     if (!success) 
     { 
      // abort the channel 
      ((IClientChannel)client).Abort(); 
      factory.Abort(); 
     } 
     } 
    } 
    } 
} 
+0

grazie per la riproduzione ma la tua soluzione non funziona con me, qualsiasi suggerimento, non ho abbastanza conoscenza su MVC –

+0

Potresti voler controllare alcuni tutorial e video gratuiti su Microsoft siti, hanno una buona documentazione per avere una solida conoscenza di MVC. –