代码之家  ›  专栏  ›  技术社区  ›  jwaliszko

WCF服务包装器-将endpointConfigurationName传递给服务客户端构造函数

  •  1
  • jwaliszko  · 技术社区  · 14 年前

    public class ServiceProxyHelper<TProxy, TChannel> : IDisposable
          where TProxy : ClientBase<TChannel>, new()
          where TChannel : class
       {
          private TProxy m_proxy;
    
          public TProxy Proxy
          {
             get
             {
                if (m_proxy != null)
                {
                   return m_proxy;
                }
                throw new ObjectDisposedException("ServiceProxyHelper");
             }
          }
    
          protected ServiceProxyHelper()
          {
             m_proxy = new TProxy();
          }
    
          public void Dispose()
          {
              //....
          }
    }
    

    我是这样用的:

       public class AccountServiceClientWrapper : ServiceProxyHelper<AccountServiceClient, IAccountService>
       {
       }
    
       public class Test()
       {
          using(AccountServiceClientWrapper wrapper = new AccountServiceClientWrapper())
          {
             wrapper.Proxy.Authenticate();
          }
       }
    

    如何修改代码以提供 终结点配置名称

    wrapper.Proxy.Endpoint.Name = "MyCustomEndpointName";
    

    不起作用。那个 终结点配置名称

    2 回复  |  直到 14 年前
        1
  •  1
  •   VinayC    14 年前

    Activator.CreateInstance

    protected ServiceProxyHelper(string endpointConfigurationName )
    {
      m_proxy = (TProxy)Activator.CreateInstance(typeof(TProxy), endpointConfigurationName);
    }
    

        2
  •  2
  •   Learner    14 年前

    我会指定 TProxy ServiceProxyHelper 建造师。

    protected ServiceProxyHelper(TProxy proxy)
    {
      m_proxy = proxy;
    }
    

    然后,代理包装器类将如下所示:

    public class AccountServiceClientWrapper : ServiceProxyHelper<AccountServiceClient, IAccountService>
    {
    private endpointCfgName = "{endpoint_here}";
    
    public AccountServiceClientWrapper(): base(new AccountServiceClient(endpointCfgName))
            {
                //this.Proxy.ClientCredentials.UserName.UserName = "XYZ";
                //this.Proxy.ClientCredentials.UserName.Password = "XYZ";
            }
    }
    

    然后,你使用它的方式保持完全相同。

    当然,您需要移除 "new"