2013-05-14 27 views
6

Tôi có câu hỏi về cách truy cập WCF. Tôi đã xây dựng một dịch vụ WCF an toàn trả về dữ liệu từ một cơ sở dữ liệu và nó hoạt động tốt. Bây giờ tôi cần truy cập dịch vụ web này thông qua MVC (Tôi không có đủ kiến ​​thức về nó).Cách truy cập dịch vụ WCF trong ứng dụng ASP.Net MVC?

Tôi đã kiểm tra các câu hỏi tương tự trên Stack Overflow nhưng tôi không tìm thấy những gì tôi cần. Tôi theo sau này link nhưng như tôi đã nói, WCF trả về dữ liệu từ SQL, tôi kết nối WCF của tôi với SQL và khi tôi sử dụng ví dụ này tôi không nhận được kết quả mong đợi.

hoạt động mà tôi gọi trong MVC và nó trả về kiểu dữ liệu từ SQL

[OperationContract] 
DataSet GetAllbooks(string Title) 

trong Homecontrller trong MVC i viết

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

và theo quan điểm của tôi đã viết

 @{ 
    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> 

tôi không nhận được bất kỳ kết quả nào

Ngoài ra một số dịch vụ do WCF cung cấp cần chấp nhận đầu vào từ người dùng như thế nào tôi có thể làm điều đó

Cảm ơn bạn.

+0

Xin chào Sara và chào mừng bạn đến với StackOverflow. Câu hỏi của bạn thiếu số lượng thông tin cần thiết để các thành viên có thể giúp bạn. Bạn cần bao gồm bất kỳ thông báo lỗi nào bạn đang nhận được và các phần có liên quan của mã bạn đã viết. –

+0

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

Trả lời

6

Đây là một câu hỏi khá cơ bản nhưng nói chung bạn có thể thêm tham chiếu dịch vụ web và thông tin điểm cuối trong tệp Web.Config chính nhưng tôi nghi ngờ bạn gặp sự cố khi gọi URL dịch vụ WCF, nếu tôi đăng một ví dụ của một lớp chung/wrapper để gọi các dịch vụ web WCF trong một ứng dụng MVC.

Thêm Web Reference vào Visual Studio 2012:

  1. Nhấp chuột phải vào dự án trong Solution Explorer
  2. Chọn Add-> Dịch vụ Reference -> Sau đó nhấp vào nút Advanced ... ->
  3. Sau đó nhấp vào nút "Thêm tham chiếu web ..." -> sau đó nhập địa chỉ Dịch vụ web của bạn vào hộp URL. Sau đó nhấp vào mũi tên màu xanh lá cây và Visual Studio sẽ khám phá các dịch vụ web của bạn và hiển thị chúng.

Bạn có thể đã biết ở trên và có thể chỉ cần một lớp trình bao bọc chung giúp gọi Dịch vụ web WCF dễ dàng trong MVC. Tôi đã thấy rằng việc sử dụng lớp chung hoạt động tốt. Tôi không thể lấy tín dụng cho nó; tìm thấy nó trên internet và không có phân bổ. Có một ví dụ hoàn chỉnh với mã nguồn có thể tải xuống tại số http://www.displacedguy.com/tech/powerbuilder-125-wcf-web-services-asp-net-p3 gọi một dịch vụ Web WCF được tạo bằng PowerBuilder 12.5.Net, nhưng quá trình gọi dịch vụ Web WCF trong MVC là như nhau cho dù nó được tạo trong Visual Studio hay Xây dựng quyền lực.

Đây là mã cho một lớp wrapper chung cho gọi WCF Web Services trong ASP.NET MVC

Tất nhiên không mô hình xử lý lỗi của bạn sau khi dụ đầy đủ của tôi ...

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

cảm ơn u cho replay nhưng giải pháp ur không làm việc với tôi, bất kỳ đề nghị, tôi không có đủ kiến ​​thức về MVC –

+0

Bạn có thể muốn kiểm tra một số hướng dẫn miễn phí và video trên Microsoft các trang web, họ có một số tài liệu khá tốt để giúp bạn hiểu rõ về MVC. –

Các vấn đề liên quan