我有两个项目:Mvc3TestSvcRef& Mvc4TestSvcRef。 Mvc3TestSvcRef来自ASP.NET MVC 3模板,用于Intranet应用程序。 Mvc4TestSvcRef来自ASP.NET MVC 4模板,用于Intranet应用程序。
我正在尝试添加服务引用。 在Mvc3TestSvcRef中,我右键单击项目(或References文件夹)并选择Add Service Reference。我指向URL,单击Go。解析引用后,输入命名空间并单击“确定”。正如所料,我看到添加到配置中的部分已完成绑定和客户端标记。 我可以导入:“使用Mvc3TestSvcRef.MySvcRef;” 并编写如下代码:
using (var cl = new MyServiceClient())
{
cl.DoStuff();
}
在Mvc4TestSvcRef中,我遵循相同的步骤,但没有将system.servicemodel添加到config。另外导入:“使用Mvc4TestSvcRef.MySvcRef;”无法解决。 我已经从Visual Studio 2010和Visual Studio 2012中为MVC 4尝试过这个。
在ASP.NET MVC 4项目类型中添加服务引用的过程是否有重大更改,或者我是否遗漏了某些内容或是否已损坏安装?
答案 0 :(得分:16)
Reference.cs中没有代码,只是评论:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.17929
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
我从工作和修改命名空间的项目中复制了reference.cs,然后将工作项目中的部分添加到MVC 4项目中并且仍然存在问题。
我尝试构建,但我收到了一些警告和错误。无法为服务引用“MySvcRef”生成代码。有关详细信息,请查看其他错误和警告消息。
这让我想到了这篇文章:Service Reference Error: Failed to generate code for the service reference
因此,我从“高级”部分取消选中所有引用的程序集中的“重用”类型。
这似乎已经产生了良好的服务参考。虽然,我应该指出,如果你有一些系统,例如System.TimeSpan,在你的一个DataContracts中用作DataMember,那么引用现在将在引用命名空间中具有TimeSpan,而不是来自它的原点。因此,客户端会将任何System.Timespan属性视为ReferenceNameSpace.Timespan,这可能会导致比较等等。这里更好的答案是包含引用中的特定程序集,不要选中System.Web.Http的复选框,如下面的注释所示
答案 1 :(得分:8)
我不知道是否为时已晚,但这里有解决方案“当您添加引用时,在高级设置中删除重用类型复选框。”