2009-12-16 2 views
0

기존 서비스 내에서 원격 WCF 서비스를 호출하려고합니다.다른 WCF 서비스를 호출하는 중 ... 아니면 내가 무엇입니까?

나는 내 자신이 서비스의 WebMethod에 다음과 같이를 원격 서비스에서 소비하고 사용하는 데 필요한 방법에 서비스 참조를 추가 한

: 호출에 함께

[WebMethod(Description = "My local service."] 
    public RemoteService.ServiceResponse ServiceRequest(RemoteService.SendRequest myObject) 
    { 
     // Instance of remote service's method I'm 
     RemoteService.ServiceResponse SendResponse; 

     SendResponse = ServiceRequest(RemoteService.SendRequest)  

     return SendResponse; 
    } 

내 질문 원격 서비스의 ServiceRequest 웹 메서드, 실제로 원격 서비스를 호출합니까?! 아니면 원격 서비스의 ServiceRequest 메서드 인스턴스 인 인스턴스를 호출하고 있습니까?

내 잘못에 대해 옳다면, 내가해야 할 일을하는 적절한 방법이 될 것입니다. 제 서비스에 대한 요청과 응답을 통과시키는 패스워드 또는 프록시라고 생각하는 행동에 원격 서비스?

답변

3

우선, [WebMethod] 속성은 WCF가 아닌 ASMX 웹 서비스를 가리 킵니다. 정말 WCF인가요 ??

둘째, WCF : 서비스에서 메서드를 호출하려면 해당 서비스의 프록시 클라이언트를 인스턴스화해야합니다. 서비스 참조를 생성 할 때 ServiceNamespace.ServiceReferenceClient 클래스의 클래스를 가져야합니다.이 클래스는 자동 생성되었습니다.

[WebMethod(Description = "My local service."] 
public RemoteService.ServiceResponse ServiceRequest(RemoteService.SendRequest myObject) 
{ 
     // Instance of remote service's method I'm 
     RemoteService.ServiceResponse SendResponse; 

     ServiceProxyClient client = new ServiceProxyClient();  

     SendResponse = client.ServiceRequest(RemoteService.SendRequest)  

     return SendResponse; 
    } 

그런 식으로, 당신은 실제로 당신이 단지 서비스 참조로 추가 서비스를 요구하고있다 :이 인스턴스를 그 프록시의 메소드를 호출 할 필요가있다.

+1

위대한 답변! 내가 추가 할 수있는 유일한 점은 두 서비스가 동일한 시스템에 있고 그것이있는 것처럼 들리면 netNamedPipes 바인딩 사용을 고려해야한다는 것입니다. 그것은 클라이언트와 서비스가 같은 상자에 있고 매우 빠르다는 상황을 위해 설계되었습니다. –

+1

Marc, 저는 아직 웹 서비스에 익숙하지 않고 용어를 여전히 소화하고 있습니다. 고마워, 이건 정말 오늘 아침에 내가 본 무 커를 깨끗이 해준다. :) 제임스, 네 궁극적으로 두 서비스는 동일한 서버에서 실행되므로 netNamedPipes 바인딩을 제안하고 활성화 할 때 수행 할 것입니다. –