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 はクラスです。
みんな助けてください。誰かが他のコードを見たい場合はお知らせください。
どうもありがとう。
編集:::::::
トーマスさん、お返事ありがとうございます。IDispatchMessageInspector を実装するクラス 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 サポートを追加することだけです。私が正しくやっているかどうか教えてください。または、同じことを行う他の方法があります。