如何使用外部MVC 3应用程序使用WCF服务?

时间:2012-08-08 06:25:39

标签: asp.net-mvc-3 wcf

我创建了一个简单的WCF服务,用于显示表格详细信息。我的服务准备好了。

现在在我的外部MVC 3应用程序中,我需要使用我的WCF服务。所以我已经完成了添加服务参考

如何在我的MVC 3应用程序中编写代理代码以使用我的服务? 我是WCF和ASP.NET MVC的新手。我接下来应该做什么来使用wcf服务?

我的代码:

接口

[ServiceContract]
public interface IBooksService
{
    [OperationContract]
    string GetBooksInfo(int BookId);
}

public class BooksService:IBooksService
{
    public string GetBooksInfo(int BookId)
    {
        string ConnectionString = "myDB";
        SqlConnection con = new SqlConnection(ConnectionString);
        con.Open();
        SqlCommand cmd = new SqlCommand("Get_BooksInfo", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@BookId", BookId));
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
            return dr[0].ToString();
        else
            return "-1";
    }
}

在mvc 3 app中,我添加了服务参考。

2 个答案:

答案 0 :(得分:3)

最简单的方法是为服务生成代理,然后在该代理上调用方法。对于简单的情况,下面的代码应该绰绰有余,或者你可以用它作为起点:

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress endpointAddress = new EndpointAddress(//url for the service goes here);
_proxy = ChannelFactory<ImplementedInterface>.CreateChannel(binding, endpointAddress);

请注意,这甚至不需要添加服务引用(只要您拥有服务实现的接口的副本),它将为您提供可以像项目中的任何其他类一样使用的代理。只需确保在生成的代理上调用方法时捕获wcf错误(FaultException,FaultException,TimeoutException,CommunicationException)而不是通常的.Net错误。

答案 1 :(得分:2)

首先,您希望在控制器中对WCF服务进行using引用,将其添加到应用程序时设置的名称。因此,如果您调用它WCFService并且您的项目名为MyMvcApplication,那么您就是这样的:using MyMvcApplication.WCFService

然后,您将在控制器中使用服务类的名称对其进行实例化,因此,如果您的.svc类被调用ServiceClass,则执行以下操作:ServiceClass myService = new ServiceClass(); < / p>

然后在您的操作/方法中,您只需调用您在ServiceClass上创建的方法,如下所示:myService.MyMethod(myParam);

修改

在你的控制器中你会有类似的东西:

using MyMvcApplication.WCFService

public class MyController : Controller
{
    private BooksServiceClient myService = new BooksServiceClient();

    public ActionResult Details(int id)
    {
        var book = myService.GetBooksInfo(id);

        return View(book);
    }
}

这不起作用吗?因为你的代码看起来很好......

如果这不起作用,那么我建议查看新的ASP.NET Web API,因为它将在未来取代WCF并且更容易实现并且也可以进行调用..