0

バッファとメッセージサイズを増やすためにカスタムバインディングを追加するようにweb.configを変更しましたが、サービス要素を明示的に作成すると、動作要素への参照が壊れたようです。

WCFテストクライアントを使用してVSからWebサービスを実行しようとした場合、またはサービスページに移動した場合、次のエラーが発生します。

Metadata publishing for this service is currently disabled.

私は自分のweb.configをこれに関するいくつかの異なるソースと比較しましたが、すべてが一致しているようです。問題が何なのかわかりません。

System.serviceModel要素は次のとおりです。

<system.serviceModel>    
<services>
  <service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="http://localhost:1895/BIMIntegrationService.svc" 
              binding="customBinding" bindingConfiguration="customBinding0" 
              contract="BIMIntegrationWS.IBIMIntegrationService"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="metadataBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <customBinding>
    <binding name="customBinding0">
      <binaryMessageEncoding />
      <httpTransport maxReceivedMessageSize="262064"
                   maxBufferSize="262064"
                   maxBufferPoolSize="262064" />
    </binding>
  </customBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"  aspNetCompatibilityEnabled="true"/>

Webサービスページが要素を見つけていないようです。ターゲットのbehaviorConfigurationが存在しない、またはそのようなものが存在しないというエラーは発生しません。メタデータ発行が有効になっていないだけです。

どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

2

私は問題を「修正」したと思います。もっと後で来る。

編集:問題を「修正」するために、基本的に新しいWCFサービスをアプリケーションに追加し、以前のインターフェイスを実装してから、元のサービスからすべてのコードをコピーし、.configファイルを微調整しました(質問に投稿されたものとほとんど同じように見えます)、すべてが正常に機能しました。

もちろん、私は皆が知っているように、ここには魔法がないこと、いくつかの矛盾があるに違いないことを知っています。これは、「BIMIntegrationService.svc」という元のサービスを作成した後、これは名前が長すぎると判断したため、クラスの名前を「BIMIntegrationWS」に変更/リファクタリングしたことに気付いた/思い出したときです。ただし、これを行っても、サービスファイルの名前(したがって、http://アドレス内のファイルの名前)は変更されません。

簡単に言うと、.configに2つの変更を加え、すべてが機能しました。

1)変更しました:

<service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">

<service name="BIMIntegrationWS.BIMIntegrationWS" behaviorConfiguration="metadataBehavior">

このようなサービスを実行した後、複数のSiteBindingが有効になっている場合、エンドポイントアドレスは相対的である必要があるというエラー(今回は便利なもの)が表示されました。それで:

2)それをfalseに設定し(そもそもなぜそこにあったのか覚えていないため)、すべてが正常に機能しました。

Webサービスが「service」要素をまったく使用していないように見えたときにヒントを得る必要があったと思います。:\

編集2:

実際、私の2番目のコメントで、元の質問で、自動生成されたタグが「BIMIntegrationService」ではなく、を指していることがわかります。それはそれを与えるべきだった。

他の多くの人がこれと同じ問題を抱えているとは思えませんが、念のためです。

于 2010-08-05T16:01:34.433 に答える
0

私も同じ問題を抱えています。すべてが正しく構成されていますが(実行中の以前のサービスからコードをコピーした場合でも)、サービスがメタデータを公開できるようにすることに変更はありません。それでも、app.configに対してスペルミス、解析エラーなどを行うと、問題を修正するように指示する例外が表示されます(これは、サービスが構成を読み取っていることを示し、無視します。

ホストアプリケーションで構成設定を生成することで、これを回避できました。

System.ServiceModel.Description.ServiceMetadataBehavior smb = new System.ServiceModel.Description.ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
ServiceBase host = new Servicebase(typeof(MyService), new Uri("http://localhost:1234/"));
host.Description.Behaviors.Add(smb);
host.Open();

...

host.Close();

基本的に、コードが適用したい構成ファイルの変更をオーバーライドしてプッシュできるようにします。理想的ではないことはわかっていますが、これを実行可能にするWindowsサービスを介してサービスを公開していました。問題が解決した場合は、解決策を伝えてください。理由を知りたいのですが(少なくとも、両方の場合ではないにしても)、失敗する理由を知りたいと思います。

于 2010-08-05T19:42:41.837 に答える