在同一服务器上访问WCF服务

时间:2009-11-09 20:24:19

标签: .net wcf

我有一个带有WCF服务的.NET网站。如何访问服务的当前操作上下文?一种可能的解决方法是只在应用程序内调用服务......但这似乎是草率和多余的;特别是当服务和网站是同一个应用程序时。

- 更新
目标是通过Silverlight和WCF创建通知系统。当用户创建游戏时,他们需要等待玩家。当另一个玩家决定通过游戏列表页面(仅仅是标准HTML)加入游戏时,必须通知创建者某人想玩。用户按下“加入”游戏按钮,服务器执行页面回发,并与WCF服务进行对话。然后,WCF将消息推送到游戏创建者的silverlight界面。

现在我可以创建一个对我自己的应用程序的Web引用,但我希望绕过这一步,因为它们都在同一台服务器上;同样的应用程序。

4 个答案:

答案 0 :(得分:1)

我同意大卫;如果你想要的是在不经过WCF的情况下调用服务,你可以简单地实例化服务类。

另一方面,如果您希望WCF服务能够访问HTTPContext对象并具有对Web用户会话的完全访问权限,那么您可以在服务类(而不是接口)上添加AspNetCompatibilityRequirements属性:

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

这是好是坏还是紧密耦合或其他任何真正取决于您的使用情况和服务的可用性。

答案 1 :(得分:0)

您能定义“当前的运营环境吗?”

如果您只想在同一个项目或网站中使用该服务,您只需像对待任何其他类一样实例化该服务:

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

...别处

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

在此处或在其他应用程序中使用服务之间的区别在于您不使用添加服务引用时生成的代理/客户端对象。

答案 2 :(得分:0)

您需要提供更多的上下文和架构细节。主要是......从哪里来,你究竟需要操作上下文?如果您正在尝试利用Web服务范围之外的操作上下文,那么我会说您在应用程序与基础结构和上下文详细信息之间创建了一个非常糟糕的耦合,您的应用程序绝对没有业务知道。

同样,您需要澄清您的问题,以便我能提供更好的答案。

答案 3 :(得分:0)

经过大量研究和对WCF的更清楚的了解,我现在找到了答案。我正在使用DuplexService绑定(在客户端/服务器上保留活动会话/实例)。无法通过标准的aspx网页访问双工会话实例。如果服务器将任何消息推送到客户端,您必须拥有可以维持与服务器的活动会话的客户端(silverlight或Windows应用程序)。