2009-11-09 224 views
0

我有一個帶有WCF服務的.NET網站。我如何訪問我的服務的當前操作上下文?一個可能的解決方法是在應用程序內調用服務......但這似乎是sl and和多餘的;特別是當服務和網站是相同的應用程序時。在同一臺服務器上訪問WCF服務

- 更新
目標是通過Silverlight和WCF創建通知系統。當用戶創建遊戲時,他們需要等待玩家。當另一個玩家決定通過遊戲列表頁面加入遊戲時,必須通知創建者有人想玩遊戲。用戶按下「加入」遊戲按鈕,服務器進行頁面回發,並與WCF服務通話。 WCF然後將消息推送到遊戲創建者的silverlight界面。

現在我可以只創建一個Web引用到我自己的應用程序,但我正在尋找繞過了那一步,因爲他們都在同一臺服務器上;同樣的應用程序。

+0

我不清楚你在問什麼。 – Brian 2009-11-09 20:32:09

回答

0

大量的研究和WCF更清晰的認識之後,我現在發現我的答案。我正在使用DuplexService綁定(活動會話/實例保留在客戶端/服務器上)。通過標準的aspx網頁訪問Duplex會話實例是不可能的。您必須有一個客戶端(silverlight或windows應用程序),可以維護與服務器的活動會話,以防服務器將任何消息推送到客戶端。

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 2009-11-09 20:42:18

+0

這始終是一個糟糕的主意,因爲它完全繞過了整個WCF運行。 – 2009-11-09 22:16:28

+0

@Drew「壞主意」取決於你的應用程序。如果你有一些代碼在託管服務器和其他代碼中使用,WCF是提供該接口的一種很好的方式,但直接使用該類沒有任何問題。有一個應用程序通過WCF與自己交談的開銷是最好的。 – 2009-11-09 22:40:06

0

您需要提供更多的背景和建築細節。主要...從哪裏,你確實需要操作環境?如果您試圖利用Web服務範圍之外的操作上下文,那麼我會說您正在創建一個應用程序與基礎結構和上下文細節之間非常糟糕的耦合,您的應用程序完全沒有業務知道。

同樣,你需要澄清你的問題,所以我可以提供一個更好的答案。

1

我同意大衛;如果你想要的是不通過WCF調用服務,你可以簡單地實例化服務類。

在另一方面,如果你想在WCF服務能夠訪問的HttpContext對象,並有充分的訪問網絡用戶的會話,然後您添加AspNetCompatibilityRequirements您的服務類屬性(不是接口):

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

這是好還是壞或緊密耦合或什麼是真的取決於你的使用和服務的可用性。

相關問題