問題タブ [webhttpbinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1275 参照

wcf - コードで ServiceHost 拡張機能を追加する

私はここで見つけたこのXMLを切り取ってApp.configいます:

いくつかの理由で、アセンブリをハードコーディングしたくなく、そのために XML ファイルを使用したくありません。

現在、私はこのコードを使用しています:

しかし、最後の行が機能しません。どうすれば修正できますか? コードでそれを行うことが可能でなければならないと思います。


現在、JsonSerialisator を使用しようとすると問題が発生するほとんどの解決策が見つかりましたが、現在はこのバインディングを使用しています。

GZipMessageEncoder、圧縮をオプションにするために少し変更されています。

しかし、私のコードでは、マークされた行でのデバッグ中に Visual Studio がクラッシュしました。何か案は?

0 投票する
2 に答える
8778 参照

c# - WCF ServiceContractのデフォルトのRequestFormatを設定するにはどうすればよいですか?

私はたくさんのメソッドを持つWebサービスを書いています。これらはすべて、次のように設定されています。

私がやりたいのは、web.configファイルでデフォルトの//すべてを設定することですBodyStyle。今、私はこれを行うことができることを知っています:RequestFormatResponseFormat

しかし、RequestFormatの属性はないようです。RequestFormatデフォルトをJSONに設定するにはどうすればよいですか?

0 投票する
1 に答える
1463 参照

wcf - 拡張名'webHttp'は、system.serviceModel / extends/behaviorExtensionsのコレクションに登録されていません

IIS6.1でRESTサービスをホストしています。次のエラーが発生します。

これに対する修正は何でしょうか?

0 投票する
1 に答える
2461 参照

asp.net - WCF は、そうではないのに最大クエリ文字列値を超えていると言います

ASP.NET 4/IIS 8 を使用して ( を介してwebHttpBinding) WCF サービスを使用していますが、JSON を使用してGET. しかし、今日は大きなクエリ文字列 (約 3000 文字、それほど長くはありませんが、私が使用していたものよりも長い) を送信するメソッドを実装する必要がありました。サービスを呼び出したところ、デバッグ マシンでコードにステップ インすることさえせずに、すぐに 404 エラーが発生しました。最初に頭に浮かんだのは、クエリ文字列の最大長の制限です。これをweb.configに追加しました:

現在、サービスを呼び出すと、このサーバー エラーが発生します。奇妙なことに、約 3000 文字のクエリ文字列と URL を介して、The length of the query string for this request exceeds the configured maxQueryStringLength value.などの他の値を試しました。200000何か不足していますか?

0 投票する
1 に答える
960 参照

.net - ASP.NETルーティングを使用したwebHttpBindingで使用されるエンドポイントアドレスをWCFはどのように決定しますか?

Web アプリケーションの Silverlight コードで使用される WCF サービスがあります。ASP.NET ルーティング機能を使用します。

これは現在、本番環境で機能しています。

他のいくつかの環境では、例外が発生します

System.InvalidOperationException: WebHttpBinding をバインドするエンドポイントのスキーム http に一致するベース アドレスが見つかりませんでした。登録されているベース アドレス スキームは [https] です。

まったく同じコードを統合環境とトレーニング環境にデプロイしました。統合では機能しますが、トレーニングでは失敗します。どちらの環境も、同じバージョンの Windows Server 2008 R2 Enterprise と同じバージョンの IIS 7.5 を実行しています。どちらも IIS で同じバインドが構成されています (すべての IP アドレスでポート 443 と 80)。

コードをインストルメント化しましたが、動作すると http と https の両方がサービスで使用されていることがわかります。失敗すると、https のみが使用されます。web.config は、2 つのシステム間で同一です。

一般に、IIS アプリケーションでホストされるサービスでは、WCF が IIS のバインド情報を使用することを知っています。この場合、ASP.NET ルーティング機能が使用されています。

WCF は使用するベース アドレスをどのように決定しますか?


更新: web.config ファイルの抜粋を次に示します。


編集

もう 1 つのヒント:「SSL が必要」は、トレーニング環境の IIS で設定され、統合環境でクリアされました。Training 環境でこれをクリアすると、サーバー側の例外が防止されます。現在、両方の環境の WCF ログは、http アドレスと https アドレスの両方が考慮されていることを示しています。

問題は、リクエストが https として到着したときに、なぜ WCF が http が必要だと考えるのかということです。

0 投票する
1 に答える
2234 参照

wcf - wsHttpBinding がセルフホストされた WCF サービスで機能しない。SOAP ベースのバインディングは機能します

以下に示す単純な WCF サービスがあります。

サーバーの Web.config ファイルは

クライアントは、App.config がこれであるコンソール アプリです。

そしてクライアントプログラムはこれです。

basicHttpClient と wsHttpClient は完全に機能します。ただし、webHttpClient は例外「System.ServiceModel.CommunicationException was unhandled, HResult=-2146233087, Message=Internal Server Error」をスローします。

Visual Studio 2012 で「'MyProject' を自動的にデバッグできません。リモート プロシージャをデバッグできませんでした。これは通常、サーバーでデバッグが有効になっていないことを示しています。」と表示されるため、サーバー側でデバッグできません。

ただし、デバッグは有効になっています。診断をオンにして SvcTraceViewer を使用しても、洞察を得ることができませんでした。

私の主な関心事は、WebHttpBinding を使用した REST 呼び出しが失敗する理由を理解することですが、サーバー側のデバッグを機能させるのにも役立ちます。複数のスタートアップ プロジェクトを使用して、VS2012 でクライアントとサーバーの両方をデバッグしています。関連するサーバーは localhost だけです。

メタデータ交換を提供しないため、REST エンドポイントが WcfTestClient に表示されないことは理解していますが、そのエンドポイントを介してサービスを呼び出すことができると予想しており、コードと RESTful WCF サービスの呼び出しの例に違いは見られません。

0 投票する
1 に答える
566 参照

json - WCF wsHttpBinding、webHttpBinding、RESTのInstanceContextMode.Single

私は最近、JSON形式の結果を返す比較的単純なWCFRESTサービスの開発を開始しました。最初はすべてがうまく機能し、サービスはすぐに稼働しました。

このサービスの主な機能は、データベースから抽出された大量のデータを返すことです。このデータはめったに変更されないので、処理を高速化するためにキャッシュメカニズムを設定してみることにしました。これを行うために、InstanceContextMode.SingleとConcurrencyMode.Multipleを設定し、いくつかのスレッドロックを使用して、静的にキャッシュされた結果を安全に返すことを計画しました。5分ごと、またはIISがすべてをクリアすることを決定したときはいつでも、データはデータベースから再フェッチされます。

私の問題はInstanceContextMode.Singleが期待どおりに動作しないことです。私の理解では、WCFサービスクラスの単一のインスタンスを作成して維持する必要があります。ただし、私が持っている動作は、呼び出しごとに作成されるクラスの完全に新しいインスタンスです。これには、すべての静的変数の再初期化が含まれます。

WebサービスをwebHttpBinding(RESTに使用)からwsHttpBindingに変更し、サービスをSOAP構成として使用しようとしましたが、これはまったく同じ動作になります。

私は何が間違っているのですか!!! これを理解しようとしてあまりにも長い時間を費やしてきました。

どんな助けでも素晴らしいでしょう!

0 投票する
1 に答える
432 参照

wcf - ClientAccessPolicy.xml の WebHttpBehavior で IIS のルートの盗用/乗っ取りを停止するにはどうすればよいですか?

net.tcp WCF 通信を行う Silverlight アプリケーションを使用しています。ServiceHost 内で ClientAccessPolicy.xml を自己ホストしたいのですが、Silverlight net.tcp の要件 (TCP ポート 4502 ~ 4534 など) に従って、ポリシー ファイルはルートのポート 80 にある必要があります。私の問題は、ServiceHost が実行されているときに、IIS からポート 80 ルートを盗み、Web ページがまったく機能しないことです。

ポリシー エンドポイントを作成するコードは次のようになります。

ServiceHost が実行されている場合http://127.0.0.1/ClientAccessPolicy.xml、. ServiceHost をオフにすると、Web サイトは表示されますが、ClientAccessPolicy.xml は表示されません。

エンドポイント URI の完全なパスを使用してみました。

しかし、これは引数の例外をスローします。Silverlight はルート Web ディレクトリのポート 80 のみを参照するため、ポリシーをサブディレクトリまたは別のポートに移動しても機能しません。

明らかに、ClientAccessPolicy.xml を Web ルート ディレクトリにコピーして、ポリシー エンドポイントを無効にすることができます。エンドポイントをボタンダウンして、ClientAccessPolicy.xml への呼び出しのみをハイジャックし、IIS ポート 80 全体を盗まないようにする方法はありますか?

0 投票する
1 に答える
805 参照

wcf - WCF webHttpBinding サービスはローカルで動作するが、IIS 7.5 で "400 Bad Request" を生成する

Visual Studio 2010/ローカル IIS で正常に動作する webHttpBinding バインディングを備えた WCF サービスがあります。このサービスには、別の Web アプリ プロジェクトが .NET の HttpWebRequest オブジェクトを介して呼び出す POST メソッドが 1 つしかありません。JSON はリクエストとレスポンスに使用されます。要求と応答には、DataContractJsonSerializer によって JSON との間で変換されたオブジェクトが含まれます。

同じネットワーク上の別の Windows Server 2008 R2 マシンにサービスを展開すると、ローカルで正常に動作するまったく同じ呼び出しコードに対して "400 Bad Request" が生成されます。「コードを呼び出す」とは、Visual Studio で実行されている Web アプリを意味します。

ブラウザ経由で .svc ファイルを表示しても問題ありません。

リクエストは 1 kB 未満なので、サイズは問題ではないようです。念のため、サービスの Web.config を微調整して、より大きなリクエストを許可しましたが、それは役に立ちませんでした。

0 投票する
1 に答える
195 参照

wcf - WCF サービス間メッセージング

2 つの WCF サービスを使用してシステムを構築しています。どちらも IIS でホストされています。現時点では、両方とも単一の VS2010 Web サイト アプリに存在し、Derfault Web サイトを使用してローカルの IIS7 (Windows 7) で実行されています。両方で net.tcp を有効にしました。

サービス1

  • webHttpBinding を使用して HTTP 投稿を受け入れる
  • シリアライズ可能な複合オブジェクトでデータをラップします
  • netMsmqBinding を使用して複合オブジェクトを Service2 に送信します (期待しています)。

サービス2

  • 上記のメッセージを受け取り、それに対して何かをします

サービス 1 は期待どおりに動作しますが、構成されたプライベート キューにメッセージを配置する代わりに、コードはハンドルを使用して「送信キュー」の下に新しいキューを作成しています。

もちろん Service2 にはメッセージが表示されません。この構造を試みたのはこれが初めてなので、その場所のために Service2 がメッセージを見逃しているかどうかはわかりませんが、私が読んだ内容に基づいて、そう思われます - 私は遭遇していませんこのキュー作成動作について言及しているもの。

質問:

  1. これを正しく行っていますか (構造、web.config、またはコードに何か問題がありますか)?

  2. VS Debug で適切に実行すると、Service1 の

    proxy.ProcessForm(formMessage);

Service2コードでブレークポイントにヒットしますか、またはService2デバッグを処理する別の方法がありますか(たとえば、Windowsサービス)?

Service1 Web.Config

HTTP Post Service1 を受信すると、次の処理が実行されます。