Csharp/C#教程:ASP.NET 5添加WCF服务引用分享


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.configMapServiceReference.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中,它允许我们添加常规类库的引用。

  1. 创建WCF服务。
  2. 创建常规类库(我选择.NET Framework 4.6)
  3. 之后,我将WCF服务引用添加到ClassLibrary。
  4. 添加ClassLibrary作为ASP.net 5网站的参考。 (因为CoreCLR框架不支持System.Service模型所以我从project.json中删除了它)project.json的框架部分。

     "frameworks": { "aspnet50": { "frameworkAssemblies": { "System.ServiceModel": "" }, "dependencies": { "ClassLibrary2": "1.0.0-*" } } }, 
  5. 现在,如果您查看classlibrary项目,它包含app.config文件。
  6. 复制该文件并将其放在ASP.net网站项目的wwwroot文件夹中(vnext)
  7. 将其重命名为web.config。

现在运行你的应用程序

编辑 :添加连接服务的新扩展程序在其他答案中发布仍然不适合我,但我找到了另一个工作配置,但它要求你不要使用dnxcore50

你应该能够在你需要的地方做到:

 using YourNameSpace.ServiceReference 

旧答案

这对我有用:

我在此链接上同时遵循了针对beta4 (在页面“WCF”中找到)的已知问题提供的说明:

https://github.com/aspnet/Home/releases

所以我的步骤在哪里

  1. 添加了对另一个项目的 服务引用 (类库或Windows 8.1 univ app,如建议的那样)
  2. 引用类复制到ASP.NET 5项目
  3. 复制了整个

    ...

    app.configweb.config

  4. 在公共依赖项下,从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

(0)
上一篇 2021年11月24日
下一篇 2021年11月24日

精彩推荐