0

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

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

4

2 回答 2

2

据我所知,这些类总是部分类

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

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

你的文件.cs

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

   public void NewMethod2()
   {
   }
}
于 2010-05-28T17:17:58.133 回答
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,所以这就是为什么一切都是异步的。

于 2010-06-01T16:38:04.963 回答