私は、いくつかの Ajax 呼び出しをサポートする最初の WCF サービスに取り組んでいます。このように構成されたエンドポイントがあります。
<service behaviorConfiguration="ServiceBehavior" name="AQM">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="Binding1" contract="IAQM" />
</service>
と私の動作構成:
<endpointBehaviors>
<behavior name="web">
<webHttp />
<enableWebScript />
</behavior>
</endpointBehaviors>
特定の情報をフォーマットしてクライアントに返すことができるように、独自のエラー処理を作成する必要があります (ここを参照してくださいhttp://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/ ) . 私の WebServiceHostFactory は次のようになります。
public class MyServiceFactory : WebServiceHostFactory
{
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
{
var sh = new ServiceHost(typeof(AQM), baseAddresses);
sh.Description.Endpoints[0].Behaviors.Add(new WebHttpBehaviorEx());
return sh;
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return base.CreateServiceHost(serviceType, baseAddresses);
}
}
public class WebHttpBehaviorEx : WebHttpBehavior
{
protected override void AddServerErrorHandlers(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
// Clear default error handlers
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear();
// Add our own error handler
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(new ErrorHandlerEx());
}
ただし、独自のエラーハンドラーを作成した後、上記の構成にあった「enableWebScript」設定をオーバーライドしているようです。これは、独自の動作を動的に作成しているため、上記の構成設定。
この設定は、セキュリティ上の目的で WCF/Ajax で使用する必要があることを読みました (こちらhttp://www.asp.net/ajaxlibrary/Using%20JSON%20Syntax%20with%20Ajax.ashxを参照)。私の質問は、動的に作成された動作に「enableWebScript」設定を設定するにはどうすればよいですか? それとも無理ですか?
更新 (2011 年 6 月 1 日): 認証に Windows 資格情報を使用するように動作を動的に変更することも考えています。構成ファイルでは、次のように行われます。
<bindings>
<webHttpBinding>
<binding name="Binding1">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
これは、構成設定を無視しているように見えるため、プログラムで行う必要がある別の設定です。