ASP.NET 5 添加 WCF 服务参考
Posted
技术标签:
【中文标题】ASP.NET 5 添加 WCF 服务参考【英文标题】:ASP.NET 5 add WCF service reference 【发布时间】:2015-04-09 10:16:03 【问题描述】:在 Visual Studio 2015 Preview(Pre Release)中,如何为 WCF
服务添加服务引用?
【问题讨论】:
我认为你是对的 :( 我已经更新了我的答案以包含 VS 的版本。 好消息! WCF 现在可以在 .NET Core 上使用,并且可以在 ASP.NET 5 下访问。dotnetfoundation.org/blog/wcf-is-open-source 现在..该工具何时可以在 Visual Studio 中使用...未知。 【参考方案1】:目前,这是一个相当复杂的过程,因为该工具似乎不支持生成 WCF 客户端代码或从配置文件自动映射的方式。此外,正如 dotnetstep 所指出的,ASP.NET 团队尚未将 System.ServiceModel
移植到 5(或为 WCF 客户端提供替代方案尚未)。尽管如此,我们可以使用基于代码的方法来创建客户端代理并使用svcutil
来生成我们的服务引用类。
解决方案先决条件
对于此示例,我假设您在本地托管 http://localhost:5000/MapService.svc 的服务,该服务实现了 IMapService
合同。此外,我们将调用将包含服务代理的项目MapClient
。
您的project.json
应该类似于:
"commands":
"run": "run"
,
"frameworks":
"dnx451":
"dependencies":
"Microsoft.AspNet.Mvc": "6.0.0-beta2"
,
"frameworkAssemblies":
"System.ServiceModel": "4.0.0.0"
生成服务引用类
首先,让我们在MapClient
项目中创建一个文件夹Service References
。
接下来,打开 VS2015 的开发人员命令提示符 并导航到您的 MapClient
项目目录:
cd "C:\Users\youraccount\Documents\Visual Studio 2015\Projects\MapClient\src\MapClient"
确保MapService
正在运行并运行以下命令:
svcutil /language:cs /out:"Service References\MapServiceReference.cs" http://localhost:5000/MapService.svc
这应该会生成两个文件,output.config
和 MapServiceReference.cs
。
创建基于代码的客户端代理
由于无法自动将端点和绑定配置从配置文件映射到当前在 ASP.NET 5 中的 ClientBase
,因此 output.config
对我们没有多大用处.你可以删除它。
相反,让我们在代码中创建一个客户端代理:
using System.ServiceModel;
namespace TestWCFReference
public class Program
public void Main(string[] args)
var endpointUrl = "http://localhost:5000/MapService.svc";
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress endpoint = new EndpointAddress(endpointUrl);
ChannelFactory<IMapService> channelFactory = new ChannelFactory<IMapService>(binding, endpoint);
IMapService clientProxy = channelFactory.CreateChannel();
var map = clientProxy.GetMap();
channelFactory.Close();
现在您可以使用clientProxy
实例访问IMapService
中的任何操作合约。
作为旁注,创建一个 key:value 配置文件来存储您的绑定和端点配置并使用 Microsoft.Framework.ConfigurationModel.Configuration
对象填充您的 ChannelFactory
可能会更好的架构,这样您就可以将您的服务配置排除在外你的代码,但希望这个例子能让你开始。
【讨论】:
我有一堆“严重性代码描述项目文件行错误 CS0234 类型或命名空间名称“ServiceContractAttribute”在命名空间“System.ServiceModel”中不存在(您是否缺少程序集引用? ) MyProject.Web.DNX 4.5.1 C:\dev\MyProjectLibrary\MyProject.Web\Service References\EditUsersReference.cs 397",知道为什么吗? 我不确定我能提供多少帮助,因为我目前不在 m$ 堆栈上。你能在 Visual Studio @Lomithrani 之外编译和运行吗? 你可以试试这个方法。我只是在为一个新项目测试它。 blogs.msdn.microsoft.com/webdev/2016/05/25/…【参考方案2】:有一个新的 Visual Studio 扩展,允许您像以前的版本一样添加和使用服务引用。它还兼容新的CoreCLR,我刚刚测试过。
http://blogs.msdn.com/b/webdev/archive/2015/12/15/wcf-connected-service-visual-studio-extension-preview-for-asp-net-5-projects.aspx
【讨论】:
感谢您的贡献。【参考方案3】:目前没有可用的工具,这可能是这个 System.ServiceModel 在 asp.netcore5 中不可用的原因。
如果您决定使用 ASP.net 5,那么您现在可以执行以下操作来使用 WCF 服务(我正在使用 Visual Studio 2015 CTP 5 作为此答案)
在 VS 2015 CTP 5 中,它允许我们添加常规类库的引用。
-
创建 WCF 服务。
创建常规类库(我选择.NET Framework 4.6)
之后,我将 WCF 服务引用添加到 ClassLibrary。
添加 ClassLibrary 作为对 ASP.net 5 网站的引用。 (由于 CoreCLR 框架不支持 System.Service 模型,所以我从 project.json 中删除了它) project.json 的框架部分。
"frameworks":
"aspnet50":
"frameworkAssemblies":
"System.ServiceModel": ""
,
"dependencies":
"ClassLibrary2": "1.0.0-*"
,
现在,如果您查看 classlibrary 项目,它包含 app.config 文件。
复制该文件并将其放入 ASP.net 网站项目 (vnext) 的 wwwroot 文件夹中
将其重命名为 web.config。
现在运行您的应用程序。
【讨论】:
我只能引用 .net 5 库正常吗?我读到现在 wcf 已移植到 .net 5,但如何在我的 mvc 6 项目中引用它?【参考方案4】:编辑:在其他答案中发布的用于添加连接服务的新扩展仍然对我不起作用,但我找到了另一个工作配置,虽然它需要 你不要使用dnxcore50:
拥有一个包含服务引用的类库(选择一个框架 通过右键单击引用将其引用到您的 aspnet5 中(将创建所有包装内容)project.json的“framework”部分有Service模型和需要的序列化dll(dnxcore需要去掉)
"dnx451":
"dependencies":
"YourClassLibWillAppearHere": "1.0.0-*" // after you reference it
,
"frameworkAssemblies":
"System.ServiceModel": "4.0.0.0",
"System.ServiceModel.Http": "4.0.0.0",
"System.Runtime.Serialization": "4.0.0.0"
你应该可以在你需要的地方做:
using YourNameSpace.ServiceReference
旧答案:
这对我有用:
我同时遵循了此链接beta4 的已知问题(在“WCF”页面中找到)下提供的两个说明:
https://github.com/aspnet/Home/releases
所以我的步骤在哪里:
-
将服务参考添加到另一个项目(建议使用类库或 windows 8.1 univ 应用)
将引用类复制到 ASP.NET 5 项目中
全部复制
<system.serviceModel>...
从 app.config 到 web.config
从上面链接中的 project.json 中复制了所有缺少的依赖项列表,在常见依赖项下,不考虑特定框架的那些(试图引用 dotnet4.6 类作为 aspnet 框架依赖项的库在该框架中提供了许多缺失的类型)
"dependencies": >> here <<
"frameworks":
"dnx451": ,
"dnxcore50":
【讨论】:
【参考方案5】:另一种对我有用的潜在方法是简单地将 dll 项目添加到解决方案中,并像往常一样在此处添加服务引用 - 在 MVC 项目中包含 dll 并为服务引用。
您只需将 app.config 的内容复制到 mvc 项目自己的 app.config - 是的,app.config,而不是 web.config。
完成
【讨论】:
谢谢!这对我来说是完美的。 不是噩梦! 是的:)。我正在将一个项目移植到 ASP.Core,但使用 .Net Framework 4.6.1,如果不是 .Net Framework Core,则扩展工具不可用【参考方案6】:如果您在使用 .NET 5 添加 WCF 服务后遇到 System.ServiceModel。您可以删除 Assemblies System.Servicemodel 并使用 添加以下包>版本 4.4.4 。这对我有用。
System.ServiceModel.Duplex
System.ServiceModel.Http
System.ServiceModel.NetTcp
System.ServiceModel.Security
【讨论】:
以上是关于ASP.NET 5 添加 WCF 服务参考的主要内容,如果未能解决你的问题,请参考以下文章