目前,这是一个相当复杂的过程,因为该工具似乎不太支持生成 WCF 客户端代码或从配置文件自动映射的方式。另外,正如 dotnetstep 指出的那样,ASP.NET 团队尚未移植System.ServiceModel
尚未达到 5 个(或为 WCF 客户端提供替代方案)yet)。尽管如此,我们可以使用基于代码的方法来创建客户端代理并使用svcutil https://msdn.microsoft.com/en-us/library/aa347733%28v=vs.110%29.aspx生成我们的服务参考类。
解决方案先决条件
对于此示例,我假设您在本地托管服务http://localhost:5000/MapService.svc http://localhost:5000/MapService.svc实现了一个IMapService
合同。另外,我们将调用将包含服务代理的项目MapClient
.
Your project.json
应该看起来像:
{
"commands": {
"run": "run"
},
"frameworks": {
"dnx451": {
"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-beta2"
},
"frameworkAssemblies": {
"System.ServiceModel": "4.0.0.0"
}
}
}
}
生成服务引用类
首先,我们创建一个文件夹,Service References
, 在里面MapClient
项目。
接下来,打开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
and MapServiceReference.cs
.
创建基于代码的客户端代理
既然没有办法自动地将端点和绑定配置从配置文件映射到您的ClientBase
目前在 ASP.NET 5 中,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 https://github.com/aspnet/Configuration/blob/dev/src/Microsoft.Framework.ConfigurationModel/Configuration.cs对象填充您的ChannelFactory
因此您可以将服务配置保留在代码之外,但希望这个示例能够帮助您入门。