【问题标题】:How to access a WCF service in an ASP.Net MVC application?如何在 ASP.Net MVC 应用程序中访问 WCF 服务?
【发布时间】:2013-05-15 06:29:42
【问题描述】:

我对访问 WCF 的方式有疑问。我构建了一个安全的 WCF 服务,该服务从数据库返回数据并且工作正常。现在我需要通过 MVC 访问这个 Web 服务(我对此没有足够的了解)。

我在 Stack Overflow 上查看了类似的问题,但没有找到我需要的内容。我关注了这个link,但正如我所说,WCF 从 SQL 返回数据,我将我的 WCF 与 SQL 连接起来,当我使用这个示例时,我没有得到预期的结果。

我在 MVC 中调用的操作,它从 SQL 返回数据集类型

[OperationContract]
DataSet GetAllbooks(string Title)

在我写的 MVC 中的 Homecontrller 中

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

鉴于我写的

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

我没有得到任何结果

WCF 提供的一些服务也需要接受用户的输入,我该怎么做

谢谢。

【问题讨论】:

  • 嗨,Sara,欢迎来到 StackOverflow。您的问题缺少会员能够帮助您所需的信息量。您需要包含您收到的任何错误消息,以及您已经编写的代码的相关部分。

标签: wcf asp.net-mvc-4


【解决方案1】:

这是一个非常基本的问题,但一般来说,您可以在主 Web.Config 文件中添加 Web 服务引用和端点信息,但我怀疑您在调用 WCF 服务 URL 时遇到问题,如果是这样,我发布了一个示例用于在 MVC 应用程序中调用 WCF Web 服务的通用类/包装器。

将 Web 引用添加到 Visual Studio 2012:

  1. 在解决方案资源管理器中右键单击项目
  2. 选择添加->服务参考->然后点击高级按钮...->
  3. 然后单击“添加 Web 引用...”按钮 –> 然后在 URL 框中键入您的 Web 服务的地址。然后单击绿色箭头,Visual Studio 将发现您的 Web 服务并显示它们。

您可能已经知道上述内容,并且可能只需要一个通用包装类,它可以在 MVC 中轻松调用 WCF Web 服务。我发现使用泛型类效果很好。我不能把它归功于它;在互联网上找到它,并没有归属。在http://www.displacedguy.com/tech/powerbuilder-125-wcf-web-services-asp-net-p3 有一个完整的示例和可下载的源代码,它调用了使用 PowerBuilder 12.5.Net 制作的 WCF Web 服务,但是在 MVC 中调用 WCF Web 服务的过程是相同的,无论它是在 Visual 中创建的Studio 或 PowerBuilder。

这是用于在 ASP.NET MVC 中调用 WCF Web 服务的通用包装类的代码

当然不要按照我不完整的例子来模拟你的错误处理......

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();
         }
       }
     }
   }
 }

【讨论】:

  • 感谢您的重播,但您的解决方案不适用于我,任何建议,我对 MVC 没有足够的了解
  • 您可能想查看 Microsoft 网站上的一些免费教程和视频,它们有一些非常好的文档可以让您深入了解 MVC。
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2010-10-30
  • 2015-06-28
相关资源
最近更新 更多