1

私のプロジェクトでは、ユーザーがWebサービスに写真をアップロードできるようにするwcfRESTfulサービス。

大きなファイルのアップロードを許可するように構成設定を変更した後。(バインディング構成、つまり「TransferMode」、「BufferSize」などを追加します)すべての操作コントラクトはすべて期待どおりに機能しています。

ただし、エンドポイントのサービスヘルプページが機能しなくなりました。

エンドポイントのバインディング構成設定を削除すると、ヘルプページが表示されます

どうすればこれを修正できますか?どこで逃したの?

皆さん、ありがとうございました

<bindings>
          <webHttpBinding>
              <!-- buffer: 64KB; max size: 64MB -->
              <binding name="StreamedBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
                       receiveTimeout="00:10:00" sendTimeout="00:01:00" transferMode="Streamed" 
                       maxBufferPoolSize="67108864" maxBufferSize="65536" maxReceivedMessageSize="67108864">
              </binding>
          </webHttpBinding>
</bindings>

<service name="WCFRestFul.ApiRestful">
        <endpoint address="" binding="webHttpBinding"
                  bindingConfiguration="StreamedBinding" bindingName="StreamedBinding" 
                  contract="WCFRestFul.IApiRestful" behaviorConfiguration="web" />
 </service>

更新: 転送モードだけでなく、他の設定もあると思います。上記のコードで「bindingConfiguration」を削除すると、サービスのヘルプページに戻ります。2つのエンドポイントがあります。他のエンドポイントには「bindingConfiguration」がなく、サービスヘルプページはその上で正常に機能します。私は間違いなくここで何かを逃しました、多分単純な何か。どんな助けでも大歓迎です

4

2 に答える 2

1

私はcarlosfigueiraのアドバイスを受け、一度に1つずつ設定設定を削除しました。

構成設定をから変更しました

古いコード

<bindings>
          <webHttpBinding>
              <!-- buffer: 64KB; max size: 64MB -->
              <binding name="StreamedBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
                       receiveTimeout="00:10:00" sendTimeout="00:01:00" transferMode="Streamed" 
                       maxBufferPoolSize="67108864" maxBufferSize="65536" maxReceivedMessageSize="67108864">
              </binding>
          </webHttpBinding>
</bindings>

最終作業バージョンへ(transferMode = "Streamed"は削除されます)

<bindings>
 <webHttpBinding>
<binding name="StreamedBinding" maxReceivedMessageSize="67108864" />
 </webHttpBinding>
</bindings>

ついにサービスヘルプページが戻ってきました。

しかし、なぜそれがオフにされたのと同じように戻ったのか理解できません。

とにかく、これは私の場合の実用的な解決策です。誰かがそれが役立つと思うことを願っています。

于 2011-05-16T09:53:18.933 に答える
0

動作しなくなるとはどういう意味ですか?以下の例では、ヘルプページが引き続きサービスによって返されます(IEとChromeの両方を使用してみたところ、ページが表示されました)。

    public class StackOverflow_5937029
{
    [ServiceContract]
    public interface ITest
    {
        [WebGet]
        int Add(int x, int y);
    }
    public class Service : ITest
    {
        public int Add(int x, int y)
        {
            return x + y;
        }
    }
    static void SendRequest(string address)
    {
        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
        req.Method = "GET";

        HttpWebResponse resp;
        try
        {
            resp = (HttpWebResponse)req.GetResponse();
        }
        catch (WebException e)
        {
            resp = (HttpWebResponse)e.Response;
        }

        Console.WriteLine("HTTP/{0} {1} {2}", resp.ProtocolVersion, (int)resp.StatusCode, resp.StatusDescription);
        foreach (string headerName in resp.Headers.AllKeys)
        {
            Console.WriteLine("{0}: {1}", headerName, resp.Headers[headerName]);
        }

        Console.WriteLine();
        Stream respStream = resp.GetResponseStream();
        Console.WriteLine(new StreamReader(respStream).ReadToEnd());

        Console.WriteLine();
        Console.WriteLine("  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  ");
        Console.WriteLine();
    }
    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
        ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
        WebHttpBehavior behavior = new WebHttpBehavior
        {
            HelpEnabled = true
        };
        WebHttpBinding binding = new WebHttpBinding
        {
            TransferMode = TransferMode.Streamed
        };
        host.AddServiceEndpoint(typeof(ITest), binding, "").Behaviors.Add(behavior);
        host.Open();
        Console.WriteLine("Host opened");

        SendRequest(baseAddress + "/Add?x=4&y=8");
        SendRequest(baseAddress + "/help");

        Console.Write("Press ENTER to close the host");
        Console.ReadLine();
        host.Close();
    }
}
于 2011-05-12T20:37:45.713 に答える