【问题标题】:.NET Core RC2 - Consuming External WCF.NET Core RC2 - 使用外部 WCF
【发布时间】:2023-03-11 09:34:01
【问题描述】:

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

我已经在 Microsoft 提供的 WCF 测试客户端中测试了该服务,它工作正常,我现在想在我的 .NET Core 应用程序中使用它,但不确定如何执行此操作。

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

任何人都有一个示例,我可以简单地使用外部(不在我的项目中)WCF。

非常感谢

【问题讨论】:

  • 可以分享一下服务配置吗?
  • 我没有找到任何示例,但是 wcf 客户端库应该在 nuget 中可用。也许您可以使用实现中的一些测试用例github.com/dotnet/wcf

标签: wcf asp.net-core


【解决方案1】:

微软发布了"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. 这是合约接口内的示例操作定义:

    [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);
    }
    

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多