我想在我的WCF客户端代理代码(即从ClientBase
派生的生成的类)中为每个服务操作添加一个额外的方法。我编写了一个具有IOperationContractGenerationExtension
实现的Visual Studio扩展,但是这个接口似乎只暴露了修改服务接口的能力,而不是ClientBase
派生类。
有没有办法在代理客户端类中生成新方法?
答案 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,这就是为什么一切都是异步的。