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
前もって感謝します。