9

我有两个项目:Mvc3TestSvcRef 和 Mvc4TestSvcRef。Mvc3TestSvcRef 来自 Intranet 应用程序的 ASP.NET MVC 3 模板。Mvc4TestSvcRef 来自 Intranet 应用程序的 ASP.NET MVC 4 模板。

我正在尝试添加服务参考。在 Mvc3TestSvcRef 中,我右键单击项目(或 References 文件夹)并选择 Add Service Reference。我指向 URL,单击 Go。解析引用后,我输入一个命名空间并单击“确定”。正如预期的那样,我看到添加到配置中的部分已完成绑定和客户端标记。我可以导入:“使用 Mvc3TestSvcRef.MySvcRef;” 并编写如下代码:

        using (var cl = new MyServiceClient())
        {
            cl.DoStuff();
        }

在 Mvc4TestSvcRef 中,我遵循相同的步骤,但没有将 system.servicemodel 添加到配置中。另外导入:“使用 Mvc4TestSvcRef.MySvcRef;” 无法解决。我已经在 Visual Studio 2010 和 Visual Studio 2012 中对 MVC 4 进行了尝试。

在 ASP.NET MVC 4 项目类型中添加服务引用的过程是否有重大变化,或者我遗漏了什么或安装损坏?

4

2 回答 2

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”生成代码。有关详细信息,请查看其他错误和警告消息。

这导致我写了这篇文章:服务引用错误:无法为服务引用生成代码

所以我取消了高级部分中所有引用程序集中的重用类型。

这似乎产生了很好的服务参考。虽然,我应该指出,如果您在说 System 中有一些东西,例如 System.TimeSpan,在您的 DataContracts 之一中用作 DataMember,则引用现在将在引用命名空间中包含 TimeSpan,而不是来自它的来源。因此,客户端会将任何 System.Timespan 属性视为 ReferenceNameSpace.Timespan,这可能会引发比较等问题。此处更好的答案是包含参考中的特定程序集,并且不要选中 System.Web.Http 的框,如下面的评论中所指出的那样

于 2012-08-21T14:38:10.560 回答
8

我不知道是否为时已晚,但这是解决方案“当您添加参考时,在高级设置中删除重用类型复选框。”

于 2013-05-28T16:42:17.373 回答