在 ASP.NET MVC 4 中添加服务引用

Posted

技术标签:

【中文标题】在 ASP.NET MVC 4 中添加服务引用【英文标题】:Adding a service reference in ASP.NET MVC 4 【发布时间】:2012-08-16 06:50:29 【问题描述】:

我有两个项目: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 项目类型中添加服务引用的过程是否有重大变化,或者我遗漏了什么或安装损坏?

【问题讨论】:

仅供参考,WCF 服务引用是关于 using 块规则的少数例外之一。不要那样做。见thorarin.net/blog/post/2010/05/30/Indisposable-WCF-clients.aspx 和***.com/questions/1155815/… 【参考方案1】:

Reference.cs 中没有代码,只有 cmets:

//------------------------------------------------------------------------------
// <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 中有一些东西,例如 System.TimeSpan,在您的 DataContracts 之一中用作 DataMember,则引用现在将在引用命名空间中包含 TimeSpan,而不是来自它的来源。因此,客户端会将任何 System.Timespan 属性视为 ReferenceNameSpace.Timespan,这可能会引发比较等问题。此处更好的答案是包含参考中的特定程序集,并且不要选中 System.Web.Http 的框,如下面的 cmets 中指出的那样

【讨论】:

我遇到了同样的问题。如果我想重用类型怎么办?经过一番调查,我意识到当我取消选中程序集 System.Web.Http 的重用类型时,不会生成任何代码。当我检查它时,无论是否检查任何其他程序集,都会生成完整的代码并且没有任何东西被重用。顺便说一句,我正在使用 VS 2012 更新 1 和 MVC 4。 是的,我只是在使用 MVC 4 模板时遇到了这个问题。它似乎在其他地方工作。我已经能够在不重用任何类型的情况下生成 reference.cs,但我也能够为特定程序集选择重用类型。到目前为止,我已经使用了 System & System.Xml.Linq。我不确定是哪个特定程序集导致 reference.cs 无法完全生成,但这仍然很麻烦。 请注意 Mahmoodvcs 指出 System.Web.Http 不应专门重用。很好的收获。【参考方案2】:

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

【讨论】:

是的,这就是为什么我在 8 月 21 日给出了相同的答案 没有结果。我取消选中了重用类型的复选框,但它并没有解决问题。 Visual Studio 2013。所以现在我必须添加 Web 参考,这不是我想要的。 我正在添加两个 Web 服务。对于其中一个,取消选中重用类型可以解决问题,但对于另一个...

以上是关于在 ASP.NET MVC 4 中添加服务引用的主要内容,如果未能解决你的问题,请参考以下文章

如何将项目引用添加到 ASP.NET Core 1.0 MVC 项目

ASP.NET MVC 4 Web API

是否可以在 ASP.NET MVC 的脚本块中引用 ViewData?

ASP.NET MVC 的三层架构 + EF数据模型

asp.net MVC - 我可以从类库中引用视图吗?

ASP.NET 4.5 尚未在 Web 服务器上注册