2

WCF プロジェクトで WebOperationContext.Current を使用しようとすると、Current が null になります。以下に例を示します。誰でもそれに光を当てることができますか?

Web フォーム - 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

前もって感謝します。


私の質問の説明は次のように変更されます。

WCF プロジェクトで WebOperationContext.Current を使用しようとすると、Current が null になります。以下に例を示します。誰でもそれに光を当てることができますか?

私が必要としているのは、トークンに基づいて指定された作業を実行する既存のコードを作成する透過的な方法 (または既存のコードをほとんど変更しない方法) です。これが、ここで 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

前もって感謝します。

4

0 に答える 0