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

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

  •  0
  • dcstraw  · 技术社区  · 16 年前

    ClientBase ). 我已经编写了一个visualstudio扩展,它有一个 IOperationContractGenerationExtension 实现,但此接口似乎只公开了修改服务接口的能力,而不是 客户群 -派生类。

    2 回复  |  直到 16 年前
        1
  •  2
  •   marc_s MisterSmith    16 年前

    据我所知,那些课程总是 :

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

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

    YourOwnFile.cs

    public partial class MyWCFServiceClient 
    {
       public void NewMethod1()
       {
       }
    
       public void NewMethod2()
       {
       }
    }
    
        2
  •  0
  •   dcstraw    16 年前

    最后生成的代码如下所示:

    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,所以一切都是异步的。