WCF Webサービスメタデータ公開障害エラー
-
25-09-2019 - |
質問
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サービスページが要素を見つけていないようです。ターゲットの動作構成が存在しないこと、またはそのようなものを不平を言うエラーはありません。
どんな助けも大歓迎です。
ありがとう。
解決
私は問題を「修正」したと思います。後でもっと来る。
編集:私の問題を「修正」するために、基本的に新しいWCFサービスをアプリケーションに追加し、以前のインターフェイスを実装した場合、元のサービスからすべてのコードをコピーし、.configファイルを調整したときに(質問に投稿されたもののように見えます)、すべてが正常に機能しました。
もちろん、私たち全員が知っているように、ここには魔法がないこと、ある程度の矛盾がなければならないことを知っています。これは、「bimintegrationservice.svc」と呼ばれる元のサービスを作成した後、これが名前が長すぎると判断したため、クラスに「bimintegrationws」に改名/リファクタリングしたと判断したことに気づきました。ただし、これを行うと、サービスファイルの名前(したがってhttp://アドレスのファイルの名前)が変更されません。
簡単に言えば、私は.configに2つの変更を加えました、そしてすべてがうまくいきました:
1)変更しました:
<service name="BIMIntegrationWS.BIMIntegrationService" behaviorConfiguration="metadataBehavior">
に
<service name="BIMIntegrationWS.BIMIntegrationWS" behaviorConfiguration="metadataBehavior">
このようなサービスを実行した後、Multiplesitebindingsが有効になった場合、エンドポイントアドレスが相対的でなければならないと不平を言うエラー(今回は役立つもの)がありました。そう:
2)私はそれをfalseに設定します(そもそもなぜそこにあったのか覚えていないので)、すべてが正常に機能しました。
私のWebサービスが私の「サービス」要素をまったく使用していないように思われたとき、私はヒントをとるべきだったと思います。 :
編集2:
実際、私の2番目のコメントでは、元の質問で、自動生成タグが「BimintegrationService」とは対照的に指摘されていたことがわかります。それはそれを与えたはずです。
他の多くの人々がこの同じ問題を抱えているとは思わないが、念のため。
他のヒント
私は同じ問題を抱えていました。すべてを正しく構成しています(実行中の以前のサービスからコードをコピーしたこともあります)が、サービスがメタデータを公開できるようにすることは変更されていません。しかし、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サービスを通してサービスを公開していました。問題が解決した場合は、ソリューションに渡してください。