0

IIS での WCF の展開について学習していて、何か奇妙なことがわかりました。基本的に、web.config で要素の behaviorConfiguration 属性をどのように設定したかに関係なく、私のサービスはデフォルトの動作のみを使用します。

だからここに私のweb.configの関連部分があります:

<system.serviceModel>
<services>
  <service name="TableImport" behaviorConfiguration="MyServiceTypeBehaviors">
    <endpoint address="" binding="wsHttpBinding" />
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="false" />
    </behavior>
    <behavior name="MyServiceTypeBehaviors" >
      <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

ご覧のとおり、デフォルトの serviceMetadata 要素には httpGetEnabled="false" が含まれていますが、MyServiceTypeBehaviors serviceMetadata 要素には httpGetEnabled="true" が含まれています。サービスの behaviorConfiguration 属性が「MyServiceTypeBehaviors」に設定されていることもわかります。

結果は、サービスがメタデータを公開するはずですが、ブラウザーと Visual Studio の [サービス参照の追加] 機能を使用すると、同じ結果 (メタデータなし) が得られます。

一方、デフォルトの動作でメタデータを有効にし、「MyServiceTypeBehaviors」で無効にし、引き続きサービスで MyServiceTypeBehaviors を使用すると、ブラウザと VS の両方からメタデータを取得できます。

私にとって、これらのテストは、構成ファイルの設定方法に関係なく、サービスがデフォルトの動作を使用していることを示しています...しかし同時に、web.configを介してデフォルトの動作を変更できるため、web.configは実際に影響を与えることができますサービスの仕組み。何か案は?

4

2 に答える 2

0

エンドポイントでコントラクトを指定しないため、コントラクトがないと、エンドポイントは使用しているサービスを認識できません。

.NET 4.0 以降を使用している場合 (そして、説明した問題に基づいて、そのように聞こえます)、実際には、サービスのアドレスに基づく既定のエンドポイントに接続しています。デフォルトのエンドポイントは、フレームワークによって提供されます。

そのため、デフォルトのサービス動作が使用されます。これは問題の説明と一致します:

- デフォルト動作の httpGetEnabled が false に設定されている場合、メタデータを取得しません。
- デフォルト動作の httpGetEnabled が true に設定されている場合、メタデータを取得します。

この状況での最も簡単な解決策は、定義しようとしているエンドポイントにコントラクトを追加することです。

<endpoint address="" binding="wsHttpBinding" contract="FullyQualified.IContractName" />
于 2013-05-14T23:07:00.163 に答える
-1

「メタデータ」または「MEX」エンドポイントを追加する必要があります。config の services セクションを次のように変更します。

     <services>
     <service name="TableImport" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="" binding="wsHttpBinding" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
     </service>
   </services>
于 2013-05-14T19:51:18.740 に答える