我正在尝试创建一个通用工厂类来调用WCF并注入一些标头。在此类中,我尝试读取HTTP Header属性。
using System.ServiceModel;
using System.ServiceModel.Channels;
using ServiceReference;
using Microsoft.AspNetCore.Http;
namespace Service
{
public class ServiceFactory
{
public static ServiceClient Create()
{
ServiceProxy service = new ServiceProxy();
string userName = HttpContext.Request.Headers["AUTH_USERNAME"];
string authenricationType = HttpContext.Request.Headers["AUTH_TYPE"];
using (new System.ServiceModel.OperationContextScope((System.ServiceModel.IClientChannel)service.InnerChannel))
{
HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
requestMessage.Headers["AUTH_USERNAME"] = userName;
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
requestMessage.Headers["AUTH_TYPE"] = authenricationType;
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
}
return service;
}
}
}
但是我得到一个编译错误,因为“非静态字段,方法或属性'HttpContext.Request'需要对象引用。>>因为我不是从静态方法或类中调用此方法,所以可能会发生。任何帮助将不胜感激。
谢谢。
我正在尝试创建一个通用工厂类来调用WCF并注入一些标头。在此类中,我尝试读取HTTP Header属性。使用System.ServiceModel;使用系统。...
HttpContext.Request
不起作用,因为它试图访问实例属性,就好像它是静态属性一样。 HttpContext.Current.Request
应该可以正常工作,假设到那时上下文已与线程关联
WCF中没有HttpContext
,WCF会话与Http会话不同。请参考以下链接。https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/wcf-services-and-aspnet?redirectedfrom=MSDN在服务器端,我们可以启用Asp.net兼容模式来访问HttpContext。这要求我们在IIS中托管服务。