2009-11-09 134 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; 
    } 
} 

这是好还是坏或紧密耦合或什么是真的取决于你的使用和服务的可用性。

相关问题