c# - ASP.NET 5 添加 WCF 服务引用

标签 c# asp.net wcf asp.net-core visual-studio-2015

在 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 开发人员命令提示符 并导航到您的 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.configMapServiceReference.cs

创建基于代码的客户端代理

由于目前在 ASP.NET 5 中无法自动将端点和绑定(bind)配置从配置文件映射到您的 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 中的任何Operation Contract。

作为旁注,创建一个存储绑定(bind)和端点配置的键值配置文件并使用 Microsoft.Framework.ConfigurationModel.Configuration 可能是更好的架构。对象来填充您的 ChannelFactory,这样您就可以将服务配置保留在代码之外,但希望这个示例能让您入门。

关于c# - ASP.NET 5 添加 WCF 服务引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28413756/

相关文章:

asp.net - 尝试发布到 Web 服务时出现 405 方法不允许错误

c# - 如果配置在字符串中,是否使用 new ChannelFactory<TChannel>(string)?

c# - 如何使用 C# 使用可以在图层模型中更改的参数从数据库中获取特定字符串

c# - 在 datagridview 内编辑文本框

c# - Linq 查询以列形式返回国家/地区,以行形式返回城市并在单元格中计数

asp.net - 如何在 ASP.Net 中执行 <form method ="get"> 搜索表单?

asp.net - 如果我在asp.net中创建线程会怎样?

java - ksoap2 org.xmlpull.v1.xmlpullparserexception 预期 start_tag 错误

c# - 使用 PerRequestLifetimeManager() 配置的 Unity 针对 WebApi 请求而非 MVC 请求创建多个 DbContext 实例

.net - 无法创建抽象类?