添加方法以生成WCF客户端代理代码

时间:2010-05-28 17:00:24

标签: code-generation wcf-client proxy-classes

我想在我的WCF客户端代理代码(即从ClientBase派生的生成的类)中为每个服务操作添加一个额外的方法。我编写了一个具有IOperationContractGenerationExtension实现的Visual Studio扩展,但是这个接口似乎只暴露了修改服务接口的能力,而不是ClientBase派生类。

有没有办法在代理客户端类中生成新方法?

2 个答案:

答案 0 :(得分:2)

据我所知,这些课程总是部分课程

public partial class MyWCFServiceClient : ClientBase<IMyWCFService>, IMyWCFService 
{
  ...
}

因此您可以使用自己的第二个文件轻松扩展它们,该文件将方法添加到同一个分部类:

<强> YourOwnFile.cs

public partial class MyWCFServiceClient 
{
   public void NewMethod1()
   {
   }

   public void NewMethod2()
   {
   }
}

答案 1 :(得分:0)

我通过在导入过程中为ClientBase派生类生成包装类来解决这个问题。我实际上首先尝试生成一个与客户端类同名的附加部分类,但这导致代码生成的其余部分停止正常工作。

所以我最终生成的代码看起来像是:

(由内置WCF代理生成器生成):

public interface ServiceReference1
{
    IAsyncResult BeginWebMethod1(AsyncCallback callback, object asyncState);
    void EndWebMethod1(IAsyncResult result);

    IAsyncResult BeginWebMethod2(AsyncCallback callback, object asyncState);
    void EndWebMethod2(IAsyncResult result);

    // ...
}

public class ServiceReference1Client
{
    public event EventHandler<AsyncCompletedEventArgs> WebMethod1Completed;
    public event EventHandler<AsyncCompletedEventArgs> WebMethod2Completed;

    public void WebMethod1Async() { /* ... */ }
    public void WebMethod2Async() { /* ... */ }

    // ...
}

(由我的自定义IOperationContractGenerationExtension生成):

public class ServiceReference1Wrapper
{
    private ServiceReference1Client _client;

    public ServiceReference1Wrapper(ServiceReference1Client client)
    {
        _client = client;
    }

    public IObservable<AsyncCompletedEventArgs> WebMethod1()
    {
        _client.WebMethod1Async();
        // ...
    }

    public IObservable<AsyncCompletedEventArgs> WebMethod2()
    {
        _client.WebMethod2Async();
        // ...
    }

    // ...
}

注意:我正在使用Silverlight,这就是为什么一切都是异步的。