C# ASP.NET 5添加WCF服务参考

C# ASP.NET 5添加WCF服务参考,c#,asp.net,wcf,asp.net-core,visual-studio-2015,C#,Asp.net,Wcf,Asp.net Core,Visual Studio 2015,在Visual Studio 2015预览版(预发行版)中,如何为WCF服务添加服务引用 目前没有可用于此目的的工具,也没有asp.netcore5中不可用的System.ServiceModel的可能原因 如果您决定使用ASP.net 5,到目前为止,您可以执行以下操作来使用WCF服务(我使用Visual Studio 2015 CTP 5来回答此问题) 在VS 2015 CTP 5中,它允许我们添加常规类库的引用 创建WCF服务 创建常规类库(我选择.NETFramework 4.6) 之后

在Visual Studio 2015预览版(预发行版)中,如何为
WCF
服务添加服务引用

目前没有可用于此目的的工具,也没有asp.netcore5中不可用的System.ServiceModel的可能原因

如果您决定使用ASP.net 5,到目前为止,您可以执行以下操作来使用WCF服务(我使用Visual Studio 2015 CTP 5来回答此问题)

在VS 2015 CTP 5中,它允许我们添加常规类库的引用

  • 创建WCF服务
  • 创建常规类库(我选择.NETFramework 4.6)
  • 之后,我向类库添加了WCF服务引用
  • 添加类库作为对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

  • 现在运行应用程序。

    目前,这是一个相当复杂的过程,因为该工具似乎不太支持生成WCF客户端代码或从配置文件自动映射。另外,正如dotnetstep所指出的,ASP.NET团队还没有将
    System.ServiceModel
    移植到5(或者还没有为WCF客户端提供替代方案)。尽管如此,我们可以使用基于代码的方法来创建客户机代理,并使用它来生成服务引用类

    解决方案先决条件 对于本例,我将假设您在本地托管一个实现
    IMapService
    契约的服务。此外,我们将调用将包含服务代理的项目
    MapClient

    您的
    project.json
    应该如下所示:

    {
    “命令”:{
    “运行”:“运行”
    },
    “框架”:{
    “dnx451”:{
    “依赖项”:{
    “Microsoft.AspNet.Mvc”:“6.0.0-beta2”
    },
    “框架组件”:{
    “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
    对我们没有多大用处。您可以删除它

    相反,让我们在代码中创建一个客户端代理:

    使用System.ServiceModel;
    命名空间testwcfreeference
    {
    公共课程
    {
    公共void Main(字符串[]参数)
    {
    var endpointUrl=”http://localhost:5000/MapService.svc";
    BasicHttpBinding=新的BasicHttpBinding();
    EndpointAddress endpoint=新的EndpointAddress(endpointUrl);
    ChannelFactory ChannelFactory=新的ChannelFactory(绑定,端点);
    IMapService clientProxy=channelFactory.CreateChannel();
    var map=clientProxy.GetMap();
    channelFactory.Close();
    }
    }
    }
    
    现在,您可以使用
    clientProxy
    实例访问
    IMapService
    中的任何操作合约

    作为旁注,最好创建一个key:value配置文件来存储绑定和端点配置,并使用该对象填充
    ChannelFactory
    ,这样您就可以将服务配置排除在代码之外,但希望这个示例能让您开始。

    编辑:在其他答案中发布的用于添加连接服务的新扩展对我仍然不起作用,但我找到了另一个工作配置,尽管它要求您不使用dnxcore50:


    • 有一个包含服务引用的类库(选择一个框架>此处有一个新的Visual Studio扩展,允许您像在以前的版本中一样添加和使用服务引用。它还与新的CoreCLR兼容,我刚刚测试过它


      另一种对我有效的方法是简单地向解决方案中添加一个dll项目,并像通常一样在此处添加服务引用-将dll包含在MVC项目中,并为服务添加引用

      您只需要将app.config的内容复制到mvc项目自己的app.config中-是的,app.config,而不是web.config


      完成

      我认为你是对的:(我已经更新了我的答案,加入了VS的版本。好消息!WCF现在可以在.NET Core上使用,并且可以在ASP.NET 5下访问。现在..该工具什么时候可以在Visual Studio中使用…未知。我有很多这样的工具“严重性代码说明项目文件行错误CS0234命名空间“System.ServiceModel”(是否缺少程序集引用?)MyProject.Web.DNX 4.5.1 C:\dev\MyProjectLibrary\MyProject.Web\Service References\EditUsersReference.cs 397中不存在类型或命名空间名称“ServiceContractAttribute”",知道为什么吗?我不知道我能帮多少忙,因为我目前不在m$stack上。你能在Visual Studio@Lomithrani之外编译和运行吗?你可以尝试这种方法。我只是在为一个新项目测试它。我只能引用.net 5库。这正常吗?我读到现在wcf被移植到了.net 5,但我如何在我的m中引用它vc 6项目?谢谢你的贡献。谢谢!这对我来说太完美了。不是噩梦吗!是的:)。我正在将一个项目移植到ASP.Cor
           "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
      
      "frameworks": {
          "dnx451": { },
          "dnxcore50": { }
        }