我有一个作为 Windows 服务托管的 WCF Restful 服务。我想为我的服务添加跨域支持。但是,当我使用 global.asax 文件时,我可以轻松地做到这一点。但我想将我的服务托管为 Windows 服务。
我创建了一个项目,将我的服务托管为 Windows 服务。现在我面临的问题是,我现在无法添加跨域支持。我尝试了通过 app.config 文件找到的所有可能的解决方案,但没有一个可行。我在这些链接上尝试了解决方案:
我尝试通过在每个服务合同方法中调用以下函数来设置代码中的标头。
private static void SetResponseHeader()
{
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Cache-Control", "no-cache, no-store");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Request-Methods", "GET, POST, PUT, DELETE, OPTIONS");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Accept");
}
界面:
namespace ReaderService
{
[ServiceContract]
public interface INFCReader
{
[OperationContract]
[WebInvoke(UriTemplate = "GetLogin", Method = "POST")]
GetLoginResults GetLogin(DisplayRequest dispRequest);
}
这里 DisplayRequest 是一个类。
请帮助各位。让我知道是否有人想查看任何其他代码。
非常感谢。
编辑:::::::
非常感谢托马斯的回复。我创建了一个实现 IDispactchMessageInspector 的类 MessageInspector。我在 MessageInspector 类中有以下代码。
public class MessageInspector : IDispatchMessageInspector
{
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
return null;
}
}
我现在得到的错误是——“对象引用未设置为对象的实例。” 错误在上述代码的这一行
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
我要做的就是为我的 Web 服务添加 CORS 支持。如果我做得正确,请告诉我。或者有没有其他方法可以做到这一点。