2010-05-28 114 views
0

我想为我的WCF客户端代理代码(即从ClientBase派生生成的类)中的每个服务操作添加一个附加方法。我已经编写了一个具有IOperationContractGenerationExtension实现的Visual Studio扩展,但此接口似乎只显示修改服务接口的功能,而不是ClientBase派生的类。向生成的WCF客户端代理代码添加方法

有没有什么办法可以在代理客户端类中生成新的方法?

+0

IOperationContextGenerationExtension确实是WCF的服务器端扩展点。你想要达到什么?只需在代理类中添加几个方法?看到我的答案。做更多的事情? – 2010-05-28 20:29:05

+0

我认为说IOperationContextGenerationExtension是服务器端并不准确。它钩入导入过程,因此是客户端(相对于Web服务)。至少这就是我使用它的方式。 – dcstraw 2010-06-01 16:21:09

回答

0

我身边这让通过生成包在导入过程中,每个类为ClientBase派生类。实际上,我首先尝试生成一个名称与客户端类相同的额外部分类,但这导致代码生成的其余部分停止正常工作。

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

(所产生的内置WCF代理生成器):

public class ServiceReference1Wrapper 
{ 
    private ServiceReference1Client _client; 

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

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

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

    // ... 
} 

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生成)

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

2

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

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

,因此您可以轻松地将其与添加方法相同的部分类自己,第二个文件扩展:

YourOwnFile.cs

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

    public void NewMethod2() 
    { 
    } 
} 
+0

感谢您的回答。我想要做的是自动生成其他方法。如果可能的话,我想避免手写它们。 – dcstraw 2010-05-28 20:52:55

+0

@dcstraw:根据什么自动生成?这些方法有什么作用? WCF具有很多可扩展点 - 无论是在客户端还是在服务器上 - 但是您必须对您要做的事情有更具体的了解,以便我们能够帮助并引导您朝着正确的方向前进... – 2010-05-28 21:04:50

+0

我想为每个返回IObservable的操作添加一个方法,这样我就可以将Rx与Web服务方法一起使用,而无需从异步事件手动创建IObservables。 – dcstraw 2010-05-28 21:52:49

相关问题