.NET Core RC2 - 使用外部WCF

时间:2016-05-23 13:15:33

标签: wcf asp.net-core

我希望在.NET Core RC2应用程序中调用.NET 4.6服务。

我已经在Microsoft提供的WCF测试客户端中测试了该服务并且工作正常,我现在想在我的.NET Core应用程序中使用它,但我不确定如何做到这一点。

我已经尝试使用svcutil来生成服务引用文件,但我猜这不是真正为新的.NET框架设计的,因为它使用了Core和命名空间System.Runtime中不存在的IExtensibleDataObject。序列化现在似乎分为Xml,Primitives和Json。

是否有人举例说明我如何简单地使用外部(不在我的项目中)WCF。

非常感谢

1 个答案:

答案 0 :(得分:4)

Microsoft发布了"WCF Connected Service for .NET Core RC2 and ASP.NET Core RC2"。它应该完成这项工作。

我用它来为我的服务生成客户端代码,并且:

  1. 它在DataContract类上使用这些属性:

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "0.2.0.0")]
    [System.Runtime.Serialization.DataContractAttribute(Name="Person", Namespace="http://schemas.datacontract.org/2004/07/Mock")]
    public partial class Person : object
    
  2. 它使用[System.Runtime.Serialization.DataMemberAttribute()]用于DataContract属性

  3. 它使用这些属性来定义服务合同:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "0.2.0.0")]
    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="Mock.IMockService")]
    public interface IMockService
    
  4. 这是合约界面内的示例opertaion定义:

    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IMockService/LookupPerson", ReplyAction="http://tempuri.org/IkMockService/LookupPersonResponse")]
    System.Threading.Tasks.Task<Mock.LookupPersonResponse> LookupPersonAsync(Mock.LookupPersonRequest request);
    
  5. 标记它使用的请求和响应对象:

    [System.ServiceModel.MessageContractAttribute(WrapperName="LookupPerson", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]
    public partial class LookupPersonRequest
    
  6. 请求/响应的属性注释为:

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=0)]
    public CepikMock.PersonSearchCriteria criteria;
    
  7. 最后,它会生成基本的IClientChannel接口

    public interface IMockChannel : Mock.IMockService, System.ServiceModel.IClientChannel
    {
    }
    
  8. ClientBase实施

    public partial class MockServiceClient : System.ServiceModel.ClientBase<Mock.IMockService>, Mock.IMockService
    
  9. 在客户端类中,每个服务方法都是这样公开的:

    public System.Threading.Tasks.Task<Mock.LookupPersonResponse> LookupPersonAsync(Mock.LookupPersonRequest request)
    {
        return base.Channel.LookupPersonAsync(request);
    }