ASP.NET 5添加WCF服务引用
在Visual Studio 2015预览版(预发行版)中,如何为WCF
服务添加服务引用?
目前,这是一个相当复杂的过程,因为工具似乎不太支持生成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的Developer Command Prompt并导航到MapClient
项目目录:
cd "C:UsersyouraccountDocumentsVisual Studio 2015ProjectsMapClientsrcMapClient"
确保MapService
正在运行并运行以下命令:
svcutil /language:cs /out:"Service ReferencesMapServiceReference.cs" https://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 = "https://localhost:5000/MapService.svc"; BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress endpoint = new EndpointAddress(endpointUrl); ChannelFactory channelFactory = new ChannelFactory (binding, endpoint); IMapService clientProxy = channelFactory.CreateChannel(); var map = clientProxy.GetMap(); channelFactory.Close(); } } }
现在,您可以使用IMapService
实例访问IMapService
任何操作契约。
作为旁注,创建密钥可能是更好的架构:值配置文件,用于存储绑定和端点配置,并使用Microsoft.Framework.ConfigurationModel.Configuration
对象填充您的ChannelFactory
以便您可以将服务配置保留在代码,但希望这个例子能让你开始。
有一个新的Visual Studio扩展,允许您添加和使用以前版本中的服务引用。 它也与新的CoreCLR兼容,我刚刚测试过它。
https://blogs.msdn.com/b/webdev/archive/2015/12/15/wcf-connected-service-visual-studio-extension-preview-for-asp-net-5-projects.aspx
目前没有可用的工具和可能的原因,这个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网站项目的wwwroot文件夹中(vnext)
- 将其重命名为web.config。
现在运行你的应用程序
编辑 :添加连接服务的新扩展程序在其他答案中发布仍然不适合我,但我找到了另一个工作配置,但它要求你不要使用dnxcore50 :
你应该能够在你需要的地方做到:
using YourNameSpace.ServiceReference
旧答案 :
这对我有用:
我在此链接上同时遵循了针对beta4 (在页面“WCF”中找到)的已知问题提供的说明:
https://github.com/aspnet/Home/releases
所以我的步骤在哪里 :
- 添加了对另一个项目的 服务引用 (类库或Windows 8.1 univ app,如建议的那样)
- 将引用类复制到ASP.NET 5项目
-
复制了整个
... 从app.config到web.config
-
在公共依赖项下,从project.json中的上面的链接中复制了所有那些缺少的依赖项列表,只留下了特定的框架( 尝试引用dotnet4.6类库作为aspnet框架依赖项,在该框架中提供了许多缺少的类型 )
"dependencies": { >> here << }
"frameworks": { "dnx451": { }, "dnxcore50": { } }
另一种对我有用的潜在方法是简单地将dll项目添加到解决方案中并像往常一样添加服务引用 – 在MVC项目中包含dll并为服务引用。
您只需将app.config的内容复制到mvc项目自己的app.config – 是,app.config,而不是web.config。
完成
上述就是C#学习教程:ASP.NET 5添加WCF服务引用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/959680.html