0

我创建了一个简单的 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 应用程序中,我添加了服务引用。

4

2 回答 2

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 错误。

于 2012-08-08T09:06:23.307 回答
2

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

然后你会在你的控制器中用你的服务类的名字来实例化它,所以如果你的.svc类被调用ServiceClass,你会做这样的事情:ServiceClass myService = new ServiceClass();

然后在您的操作/方法中,您只需调用您创建的方法,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,并且更容易实现和拨打电话..

于 2012-08-08T09:08:24.647 回答