2010-05-28 5 views
0

WCF 클라이언트 프록시 코드 (즉, ClientBase에서 파생 된 생성 된 클래스)에서 각 서비스 작업에 대해 하나의 추가 메서드를 추가하고 싶습니다. IOperationContractGenerationExtension 구현을 가진 Visual Studio 확장 프로그램을 작성했지만이 인터페이스는 ClientBase- 유도 클래스가 아닌 서비스 인터페이스를 수정할 수있는 기능만을 보여줍니다.생성 된 WCF 클라이언트 프록시 코드에 메서드 추가

프록시 클라이언트 클래스에 새로운 메소드를 생성 할 수있는 방법이 있습니까?

+0

IOperationContextGenerationExtension은 실제로 WCF의 서버 측 확장 점입니다. 달성하고자하는 것은 무엇입니까 ?? 프록시 클래스에 몇 가지 메소드를 추가하기 만하면됩니까? 내 대답을 보라. 더 많은 것을해라 ?? –

+0

IOperationContextGenerationExtension이 서버 측이라고 말하는 것이 정확하지 않다고 생각합니다. 가져 오기 프로세스에 연결되므로 클라이언트 측 (웹 서비스와 관련)입니다. 적어도 그것이 내가 그것을 사용하고있는 방법이다. – dcstraw

답변

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

+0

@dcstraw : 자동 생성은 무엇을 기반으로합니까? 이 방법들은 무엇을합니까? WCF는 클라이언트와 서버 모두에서 많은 확장 성을 제공하지만, 올바른 방향으로 도울 수 있도록하기 위해 수행하려는 작업에 대해 좀 더 구체적이어야합니다. .... –

+0

비동기 이벤트에서 IObservables를 수동으로 만들 필요없이 웹 서비스 메서드에서 Rx를 사용할 수 있도록 IObservable을 반환하는 각 작업에 대한 메서드를 추가하고 싶습니다. – dcstraw