我创建了一个简单的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中,我添加了服务参考。
答案 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并且更容易实现并且也可以进行调用..