动态调用WCF服务

动态调用WCF服务

动态调用WCF服务,只需要提供*.svc地址,

1:命名空间:

using System.ServiceModel.Channels;
using System.ServiceModel;

2:创建访问类InvokeContext

public class InvokeContext
{

#region Wcf服务工厂
public static T CreateWCFServiceByURL(string url)
{
return CreateWCFServiceByURL(url, “wsHttpBinding”);
}
public static T CreateWCFServiceByURL(string url,string bing)
{
if (string.IsNullOrEmpty(url)) throw new NotSupportedException(“this url isn`t Null or Empty!”);
EndpointAddress address = new EndpointAddress(url);
Binding binding = CreateBinding(bing);
ChannelFactory factory = new ChannelFactory(binding, address);
return factory.CreateChannel();
}
#endregion

    #region 创建传输协议  
    /// <summary>  
    /// 创建传输协议  
    /// </summary>  
    /// <param name="binding">传输协议名称</param>  
    /// <returns></returns>  
    private static Binding CreateBinding(string binding)  
    {  
        Binding bindinginstance = null;  
        if (binding.ToLower() == "basichttpbinding")  
        {  
            BasicHttpBinding ws = new BasicHttpBinding();  
            ws.MaxReceivedMessageSize = 65535000;  
            bindinginstance = ws;  
        }  
        else if (binding.ToLower() == "netnamedpipebinding")  
        {  
            NetNamedPipeBinding ws = new NetNamedPipeBinding();  
            ws.MaxReceivedMessageSize = 65535000;  
            bindinginstance = ws;  
        }  
        else if (binding.ToLower() == "netpeertcpbinding")  
        {  
            NetPeerTcpBinding ws = new NetPeerTcpBinding();  
            ws.MaxReceivedMessageSize = 65535000;  
            bindinginstance = ws;  
        }  
        else if (binding.ToLower() == "nettcpbinding")  
        {  
            NetTcpBinding ws = new NetTcpBinding();  
            ws.MaxReceivedMessageSize = 65535000;  
            ws.Security.Mode = SecurityMode.None;  
            bindinginstance = ws;  
        }  
        else if (binding.ToLower() == "wsdualhttpbinding")  
        {  
            WSDualHttpBinding ws = new WSDualHttpBinding();  
            ws.MaxReceivedMessageSize = 65535000;

            bindinginstance = ws;  
        }  
        else if (binding.ToLower() == "webhttpbinding")  
        {  
            WebHttpBinding ws = new WebHttpBinding();  
            ws.MaxReceivedMessageSize = 65535000;  
            bindinginstance = ws;  
        }  
        else if (binding.ToLower() == "wsfederationhttpbinding")  
        {  
            WSFederationHttpBinding ws = new WSFederationHttpBinding();  
            ws.MaxReceivedMessageSize = 65535000;  
            bindinginstance = ws;  
        }  
        else if (binding.ToLower() == "wshttpbinding")  
        {  
            WSHttpBinding ws = new WSHttpBinding(SecurityMode.None);  
            ws.MaxReceivedMessageSize = 65535000;  
            ws.Security.Message.ClientCredentialType = System.ServiceModel.MessageCredentialType.Windows;  
            ws.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Windows;  
            bindinginstance = ws;  
        }  
        return bindinginstance;

    }  
    #endregion

}

3.T为调用的接口类型,就是WCF返回的类的实例,由于我的WCF是基于接口的,所以加了一个接品类型判断,调用时直接写:Interface iface =
InvokeContext.CreateWCFServiceByURL(url);


动态调用WCF服务
https://www.dearcloud.cn/2014/12/10/20200310-cnblogs-old-posts/20141210-动态调用WCF服务/
作者
宋兴柱
发布于
2014年12月10日
许可协议