为什么我不能访问ClientBase的这个公共属性?

时间:2015-02-24 17:30:44

标签: c#

我有一个名为MyProxyClass的代理类,它是通过围绕SOAP Web服务WSDL的svcutil.exe自动生成的。此代理类是抽象System.ServiceModel.ClientBase<TChannel>类的实现:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class MyProxyClass : System.ServiceModel.ClientBase<MyProxyClassPortType>, MyProxyClassPortType
{
    // 60,000 lines of auto-generated code
}

System.ServiceModel.ClientBase<TChannel>定义了以下公共属性:

public ServiceEndpoint Endpoint
{
    get
    {
        //brevity
    }
}

但是,当我创建此代理类的新实例

var _client = new MyProxyClass();

我无法通过intellisense看到Endpoint属性。如果我尝试通过Endpoint访问_client.Endpoint,编译器会给出相应的'MyProxyClass' does not contain a definition for 'Endpoint' and no extension method 'Endpoint' accepting a first argument of type 'MyProxyClass' could be found (are you missing a using directive or an assembly reference?)

错误

但是,以下反射方法可以正常工作,并且按照我的预期返回属性:

ServiceEndpoint endpoint = 
(ServiceEndpoint)typeof(ClientBase<MyProxyClassPortType>).GetProperty("Endpoint").GetValue(_client);

那么为什么我不能以正常的方式访问这个公开访问(回想GetProperty的特定重载只搜索公共属性)属性?

1 个答案:

答案 0 :(得分:2)

确保您的变量键入具体类而不是接口。