Ссылка на объект WebOperationContext не установлена ​​для экземпляра объекта - PullRequest
2 голосов
/ 21 октября 2010

Когда я пытаюсь использовать WebOperationContext.Current в проекте WCF, Current является нулевым.Ниже приведен пример.Кто-нибудь может пролить свет на это?

WebForm - default.aspx:

    ServiceClient sc = new ServiceClient();

    Response.Write(sc.DoWork(1) + "<br />");

    WebOperationContext c = WebOperationContext.Current;  --Current is null

// Интерфейс WCF

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet]
    int DoWork(int num);
}

// Реализация WCF

public class Service : IService
{
    public int DoWork(int num)
    {           
        return num;
    }
}

Системные настройки: ASP.NET 3.5

Заранее спасибо.


Описание моего вопроса изменено ниже:

КогдаЯ пытаюсь использовать WebOperationContext.Current в проекте WCF, Текущий является нулевым.Ниже приведен пример.Может ли кто-нибудь пролить свет на это?

Что мне нужно - это прозрачный способ (или способ, который мало меняется в существующем коде), чтобы заставить существующий код выполнить указаннуюработа на основе токена.Вот почему здесь используется HttpModule, покажите ниже:

// HttpModule: вставьте токен, на котором может основываться работа в пипнелине.Как уже упоминалось, HttpModule используется для внесения минимальных изменений в существующий код.

public class ImageIntercept : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {

        WebOperationContext.Current.IncomingRequest.Headers.Add("image", "true");  //a token on which works will be based

    }

    public void Dispose()
    { }

}

//WCF Interface

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet]
    int DoWork(int num);
}

//WCF Implementation

public class Service : IService
{
    public int DoWork(int num)
    {
        string isImage = WebOperationContext.Current.IncomingRequest.Headers["image"];
        if(isImage == "true")
        {
            //this is what I need to do something here
        }

        return num;
    }
}

Системные настройки: ASP.NET 3.5

Заранее спасибо.

...