我希望在.NET Core RC2应用程序中调用.NET 4.6服务。
我已经在Microsoft提供的WCF测试客户端中测试了该服务并且工作正常,我现在想在我的.NET Core应用程序中使用它,但我不确定如何做到这一点。
我已经尝试使用svcutil来生成服务引用文件,但我猜这不是真正为新的.NET框架设计的,因为它使用了Core和命名空间System.Runtime中不存在的IExtensibleDataObject。序列化现在似乎分为Xml,Primitives和Json。
是否有人举例说明我如何简单地使用外部(不在我的项目中)WCF。
非常感谢
答案 0 :(得分:4)
Microsoft发布了"WCF Connected Service for .NET Core RC2 and ASP.NET Core RC2"。它应该完成这项工作。
我用它来为我的服务生成客户端代码,并且:
它在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
它使用[System.Runtime.Serialization.DataMemberAttribute()]
用于DataContract
属性
它使用这些属性来定义服务合同:
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "0.2.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="Mock.IMockService")]
public interface IMockService
这是合约界面内的示例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);
标记它使用的请求和响应对象:
[System.ServiceModel.MessageContractAttribute(WrapperName="LookupPerson", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]
public partial class LookupPersonRequest
请求/响应的属性注释为:
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=0)]
public CepikMock.PersonSearchCriteria criteria;
最后,它会生成基本的IClientChannel
接口
public interface IMockChannel : Mock.IMockService, System.ServiceModel.IClientChannel
{
}
ClientBase
实施
public partial class MockServiceClient : System.ServiceModel.ClientBase<Mock.IMockService>, Mock.IMockService
在客户端类中,每个服务方法都是这样公开的:
public System.Threading.Tasks.Task<Mock.LookupPersonResponse> LookupPersonAsync(Mock.LookupPersonRequest request)
{
return base.Channel.LookupPersonAsync(request);
}