如何在ASP.Net MVC应用程序中访问WCF服务?

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

我在Stack Overflow上查了类似的问题,但是我找不到我需要的东西.我跟着这个link,但正如我所说,WCF从sql返回数据,我用sql连接我的WCF,当我使用这个例子时,我没有得到预期的结果.

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

[OperationContract]
DataSet GetAllbooks(string Title)

在Homecontrller的MVC我写道

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提供的一些服务需要接受来自用户的输入我如何能够做到这一点

谢谢.

解决方法

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

将Web引用添加到Visual Studio 2012:

>在解决方案资源管理器中右键单击项目
>选择添加 – >;服务参考 – >然后单击高级按钮… – >
>然后单击“添加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服务,但无论是在Visual Studio中创建还是在Visual Studio中创建的,在MVC中调用WCF Web服务的过程都是相同的. 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","Check that the Web Service is running");
       }
       catch (TimeoutException e)
       {
          LinkDBMvc.AppViewPage.apperror.LogError("WebService","Check that the Web Service is running");
       }
       catch (Exception e)
       {
          LinkDBMvc.AppViewPage.apperror.LogError("WebService","Check that the Web Service is running");
       }
       finally
       {
         if (!success)
         {
           // abort the channel
           ((IClientChannel)client).Abort();
           factory.Abort();
         }
       }
     }
   }
 }

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....