[英]Adding service reference wcf
这个问题已经在这里讨论过了,但是并没有完全按照我所寻找的方式解决。
我已经从Visual Studio中的客户端控制台应用程序创建了服务引用,但是我想以编程方式使用以下约束:
从Microsoft Docs-wcf来看,很明显,我们必须为客户端提供服务接口引用。 就我而言,我确实有可用的引用,但我有托管服务的地址,而该地址是动态地址。
因此,我想定义一个自定义的客户端类,该类将仅使用主机地址声明其对象。 让我们以以下代码段为例:
public partial class CalculatorServiceClient : System.ServiceModel.ClientBase<ICalculatorService>, ICalculatorService
{
}
如您所见,定义类时ICalculatorService可用。 如果在定义类时服务接口不可用该怎么办。
您可以通过实用的方式连接到WCF服务,而不必使用生成的类方法,但是请注意,如果将来服务发生更改,这可能会出现问题。
这个想法很简单。
创建与您的服务实施相匹配的服务合同
[DataContract]
public class SomeDataContarctClass
{
[DataMember]
public string SomeMember{get;set;}
etc....
}
创建界面
public IServiceInterface
{
[OperationContract]
List<SomeDataContarctClass> GetSomeData();
...etc
}
现在这是您开始将所有东西粘合在一起的地方,
然后创建服务
public IServiceInterface CreateIService()
{
EndpointAddress myEndpoint = new EndpointAddress("SERVICE URL");
BasicHttpBinding binding= new BasicHttpBinding();
defaultBinding.MaxReceivedMessageSize = 2147483647;
defaultBinding.MaxBufferPoolSize = 2147483647;
defaultBinding.MaxBufferSize = 2147483647;
defaultBinding.ReaderQuotas.MaxArrayLength = 2147483647;
defaultBinding.ReaderQuotas.MaxStringContentLength = 2147483647;
ChannelFactory<IUpdaterService> myChannelFactory = new ChannelFactory<IServiceInterface>(binding, myEndpoint);
myChannelFactory.Endpoint.EndpointBehaviors.Add(new ServiceInterceptionBehavior());
// Create a channel.
return myChannelFactory.CreateChannel();
}
然后您可以使用致电服务
var myserviceImp = CreateIService();
var data = myserviceImp.GetSomeData();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.