这个问题已经在这里讨论过了,但是并没有完全按照我所希望的方式解决。
我已经从Visual Studio中的客户端控制台应用程序创建了服务引用,但是我想通过编程来做到以下几点:
在Microsoft Docs - wcf中,很明显,我们必须为客户端提供服务接口引用。就我而言,我确实有可用的引用,但我有托管服务的地址,而该地址是动态地址。
因此,我想定义一个自定义的客户端类,该类将仅使用主机地址声明其对象。让我们以以下代码段为例:
{{1}}
如您所见,定义类时ICalculatorService可用。定义类时,如果服务接口不可用怎么办。
答案 0 :(得分:0)
您可以使用实用的方式连接到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();