AJAX呼び出しを介してWCFRESTfulサービスに接続するときにこの問題が発生しました
私のJavaScriptはこれでした:
var GetData= function(){
var data;
$.ajax({
url: this.server + "/data",
async: false,
type: "GET",
success: function (success) {
data = success;
}
});
return data;
};
私のサービスエンドポイントはこのコードで開かれました
ServiceHost host = new ServiceHost(new MyService());
host.Open();
重要なデータはすべてApp.configファイルに保存されているため、この修正のためにそのファイルを変更する必要はありませんでした。
応答メッセージが送信される前に、どこかにヘッダーを追加する必要があることはわかっていました。
検索とハッキングを行った後、ServiceHostオブジェクトのAuthorizationプロパティを見つけました。Authorizationプロパティは、ServiceAuthorizationBehaviorクラスのインスタンスであり、そのオブジェクトには、ServiceAuthorizationManagerクラスのインスタンスであるServiceAuthorizationManagerというプロパティがあります。
ServiceAuthorizationManagerから継承する新しいクラスを作成し、それをServiceHostインスタンスのAuthorization動作のServiceAuthorizationManagerプロパティに設定することで、サービスへのすべての呼び出しをインターセプトできます。
これが私のクラスの実装方法です
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
HttpResponseMessageProperty prop = new HttpResponseMessageProperty();
prop.Headers.Add("Access-Control-Allow-Origin", "*");
operationContext.OutgoingMessageProperties.Add(HttpResponseMessageProperty.Name, prop);
return true;
}
}
次に、ServiceHostオブジェクトを宣言した直後(ホストを開く前)にこの行を追加します
host.Authorization.ServiceAuthorizationManager = new MyServiceAuthorizationManager();
これを実行し、サービスを再構築して実行した後、エラーメッセージが表示されなくなりました。やったー!
最後に、ServiceHostクラスがRESTfulサービスではなくSOAP/WSDLサービス用に設計されていることを説明した記事を読みました。RESTfulサービスの場合、WebServiceHostオブジェクトを使用する必要があります。
それで
ServiceHost host = new ServiceHost(new MyService());
host.Open();
になります
WebServiceHost host = new WebServiceHost(new MyService());
host.Open();
次のアセンブリへの参照を追加する必要があります。
お役に立てれば。
出典: