在View中使用wcf客户端类文件

时间:2013-11-13 11:42:31

标签: c# asp.net asp.net-mvc wcf asp.net-mvc-4

我在WCF应用程序中返回一个类文件。从wsdl(WCF应用程序)的svcutil.exe生成的类文件AuthenticationService.cs正保存在App_Code中并在我的项目中使用。

public ActionResult ViewName()
    {
  AuthenicationServiceClient client = new AuthenicationServiceClient("BasicHttpBinding_IAuthenicationService");
  IList<CategoryInfo> category = new List<CategoryInfo>();
  category = client.GetCategories(0, true);
  return View(category);
}
类CategoryInfo存在于AuthenticationService.cs中,我可以从控制器访问但不能在View中使用它。当我在View中使用相同的CategoryInfo时,它显示错误信息

In View
@model CategoryInfo

类CategoryInfo

  

*错误:
类型'CategoryInfo'存在于'D:\ ProjectName \ Project Path \ bin \ ProjectName.dll'和   C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30309 \ Temporary ASP.NET   文件\根\ 1664c01d_shadow \ b956618 \ 414288438 \ 30335072 \ App_Code.j4b-_1mm.dll *

有没有办法克服这个问题?

2 个答案:

答案 0 :(得分:3)

  

从svcutil.exe生成的类文件AuthenticationService.cs   wsdl(WCF应用程序)正在保存在App_Code

这就是问题所在。 Web应用程序项目类型(ASP.NET MVC使用的类型)不应使用App_Code文件夹。它适用于WebSites。因此,将这些类移到其他位置并删除App_Code文件夹,该文件夹不应出现在预编译的Web应用程序中。请在此处阅读Web应用程序项目类型与网站之间的差异:http://msdn.microsoft.com/en-us/library/dd547590(v=vs.110).aspx

您的代码无效的原因是,当您预编译项目时(因为它是Web应用程序类型),CategoryInfo类将进入生成的程序集。除了ASP.NET在App_Code文件夹中的所有内容之外,在运行时生成动态程序集并将它们放在输出中。所以基本上你最终会得到2个包含相同类的程序集。

答案 1 :(得分:0)

回复我自己的问题。

我使用Web服务以及项目文件中的相同CategoryInfo作为参考。通过删除引用并仅从Webservice客户端文件中获取CategoryInfo来消除命名冲突,解决了我的问题。

现在我不再收到错误了。