添加服务参考wcf

时间:2019-02-13 13:02:28

标签: wcf

这个问题已经在这里讨论过了,但是并没有完全按照我所希望的方式解决。

我已经从Visual Studio中的客户端控制台应用程序创建了服务引用,但是我想通过编程来做到以下几点:

Microsoft Docs - wcf中,很明显,我们必须为客户端提供服务接口引用。就我而言,我确实有可用的引用,但我有托管服务的地址,而该地址是动态地址。

因此,我想定义一个自定义的客户端类,该类将仅使用主机地址声明其对象。让我们以以下代码段为例:

{{1}}

如您所见,定义类时ICalculatorService可用。定义类时,如果服务接口不可用怎么办。

1 个答案:

答案 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();