2009-11-09 6 views
0

WCF 서비스가있는 .NET 웹 사이트가 있습니다. 내 서비스의 현재 운영 컨텍스트에 어떻게 액세스합니까? 한 가지 가능한 해결 방법은 응용 프로그램 내에서 서비스에 대한 호출을하는 것입니다.하지만 그 방법은 지루하고 중복됩니다. 특히 서비스와 웹 사이트가 동일한 애플리케이션 인 경우동일한 서버의 WCF 서비스에 액세스

- 업데이트
목표는 Silverlight 및 WCF를 통해 알림 시스템을 만드는 것입니다. 사용자가 게임을 만들면 플레이어를 기다려야합니다. 다른 플레이어가 표준 HTML 인 게임 목록 페이지를 통해 게임에 참여하기로 결정하면 작성자에게 누군가 재생하려고한다는 사실을 알려야합니다. 사용자는 "Join"게임 버튼을 누르고 서버는 페이지 다시 게시를 수행하고 WCF 서비스와 통신합니다. 그런 다음 WCF는 메시지 작성자의 실버 라이트 인터페이스로 메시지를 푸시합니다.

이제는 내 응용 프로그램에 웹 참조를 만들 수 있지만 동일한 서버에 있기 때문에이 단계를 건너 뛸 수 있습니다. 그 문제에 대해 동일한 애플 리케이션.

+0

나는 당신이 무엇을 요구하고 있는지 분명하지 않습니다. – Brian

답변

0

WCF에 대한 많은 연구와 명확한 이해를 통해 이제는 내 대답을 찾았습니다. DuplexService 바인딩 (활성 세션/인스턴스가 클라이언트/서버 모두에 유지됨)을 사용하고있었습니다. Duplex 세션 인스턴스에 액세스하는 것은 표준 aspx 웹 페이지를 통해 가능하지 않습니다. 서버가 클라이언트에 메시지를 보내면 서버에 대한 활성 세션을 유지할 수있는 클라이언트 (silverlight 또는 windows app)가 있어야합니다.

0

"현재 작업 컨텍스트"를 정의 할 수 있습니까?

그냥 같은 프로젝트 또는 사이트 내에서 서비스를 사용하려는 경우, 당신은 당신처럼 서비스를 인스턴스화 할 다른 모든 클래스 : 다른

public class MyWCF : IMyWCF 
{ 
    public void DoWork() 
    { 
    /// do something 
    } 
} 

...

IMyWcf wcf = new MyWcf(); 
wcf.DoWork(); 

여기 또는 다른 앱에서 서비스를 사용하는 것과 다른 점은 서비스 참조를 추가 할 때 생성 된 프록시/클라이언트 객체를 사용하지 않는다는 것입니다.

+0

OperationContext : http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontext.aspx – jrista

+0

이것은 전체 WCF 런타임을 완전히 우회하므로 항상 잘못된 생각입니다. –

+0

@Drew "나쁜 생각"은 앱에 따라 다릅니다. 호스팅 서버와 다른 사람들 모두에서 사용되는 코드가 있다면 WCF는 인터페이스를 제공하는 좋은 방법이지만 클래스를 직접 사용하는 데는 문제가 없습니다. 응용 프로그램이 WCF를 통해 자체적으로 이야기하는 오버 헤드를 거치게하는 것이 기껏해야 asinine입니다. –

0

좀 더 자세한 컨텍스트와 아키텍처 세부 정보를 제공해야합니다. 주로 ... 정확히 어디에서 작업 컨텍스트가 필요합니까? 웹 서비스의 범위를 벗어난 작업 컨텍스트를 활용하려는 경우 응용 프로그램과 인프라 및 컨텍스트 세부 정보간에 매우 불리한 결합을 만들어 내고 있다고 말하고 싶습니다. 응용 프로그램에 대해 전혀 알지 못하는 응용 프로그램입니다.

다시 한 번 질문을 명확히해야보다 나은 답변을 얻을 수 있습니다.

1

나는 David에게 동의합니다. 원하는 경우 WCF를 거치지 않고 서비스를 호출하면 서비스 클래스를 인스턴스화 할 수 있습니다. 당신이 HttpContext 개체에 액세스 할 수 있도록 WCF 서비스를 원하는 다음은 AspNetCompatibilityRequirements이 서비스 클래스에 속성을 추가, 웹 사용자의 세션에 대한 전체 액세스 권한이있는 경우

한편

(인터페이스되지 않음) :

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService: IMyService 
{ 
    public string DoWork(string myInput) 
    { 
     HTTPContext context = HTTPContext.Current; 
     ... 
     return myInput; 
    } 
} 

서비스의 사용 및 가용성에 실제로 영향을받는 서비스가 좋든 나쁘 든 가까운 서비스인지를 결정합니다.

관련 문제