1

私は、いくつかの 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>

これは、構成設定を無視しているように見えるため、プログラムで行う必要がある別の設定です。

4

2 に答える 2

1

私にとっては、次のコンストラクターを WebHttpBehaviorEx に追加した後に機能しました

    public  WebHttpBehaviorEx()
    {
        DefaultBodyStyle = WebMessageBodyStyle.Wrapped;
        DefaultOutgoingRequestFormat = WebMessageFormat.Json;
        DefaultOutgoingResponseFormat = WebMessageFormat.Json;
    }
于 2011-11-07T12:51:42.657 に答える
0

プログラムでインスタンスを作成し、それをエンドポイントのコレクションにWebScriptEnablingBehavior追加できるはずのクラスがあります。Behaviors私はそれを試したことがなく、単一のエンドポイントで複数の動作が定義されている場合にそれがどのように機能するかはわかりませんが、基本的には宣言型構成で行っていることだと思います。残念ながらWebScriptEnablingBehavior(から継承するWebHttpBehavior)は封印されているので、それから継承することはできません。

更新:(ここから

WebScriptEnablingBehaviorは、ASP.NETAJAXクライアントとの相互運用のために特別に設計されたWebHttpBehavior機能の「プロファイル」です。ASP.NETAJAXクライアントプロキシを自動的に生成する機能など、いくつかのAJAXイズムが追加されています。

カルロスが言ったように、実際に使用する必要があるかどうかはわかりませんが、ASP.NETAJAXを<enableWebScript/>使用している場合にのみ必要なようです。

于 2011-05-31T21:47:53.207 に答える