繁体   English   中英

添加服务参考wcf

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM