web-dev-qa-db-ja.com

WCFメタデータを有効にする方法は?

IISでsvcファイルを機能させようとしています。私のプロジェクトでは、F5キーを押すと、svcが機能しました。だから、大丈夫だと思いますよね? IISを除く。

私はWindowsで作業していますXP Proマシンで、IISに仮想ディレクトリを追加しました。

これが私のコードです:IcarePlanActions(プロジェクト:A)

namespace WcfServiceLibrary
{
    [ServiceContract]
    public interface ICarePlanActions
    {
        [OperationContract]
        List<string> GetAllClients();
    }
}

クライアント:(プロジェクト:A)

namespace WcfServiceLibrary
{
    public class Client : ICarePlanActions
    {
        public List<string> GetAllClients()
        {
            List<string> clients = new List<string>();
            clients.Add("Hendrik de Jong");
            clients.Add("Miep de Berg");
            clients.Add("Jaap Jongeneel");
            clients.Add("Joop Prakman");
            clients.Add("Pieter Schaakman");

            return clients;

        }
    }
}

Web.config(プロジェクト:B)

  <configuration>
    <system.serviceModel>
      <services>
        <service behaviorConfiguration="CarePlanService.Service1Behavior"
          name="WcfServiceLibrary.Client">
          <endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary.ICarePlanActions">
            <identity>
              <dns value="localhost" />
            </identity>
          </endpoint>
          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
      </services>
      <behaviors>
        <serviceBehaviors>
          <behavior name="CarePlanService.Service1Behavior">
            <!-- 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="false"/>
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
  </configuration>

CarePlan.svc

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary.Client" %>

このサービス(IIS上にあります)をwfctestclientで実行すると、このエラーが発生します

エラー: http://localhost/CarePlanService/CarePlan.svc からメタデータを取得できませんこれがアクセス権のあるWindows(R)Communication Foundationサービスである場合は、メタデータの発行を有効にしているか確認してください指定されたアドレス。

何が悪いのですか?

[〜#〜]ソリューション[〜#〜]

IISでサービスを動作させませんでした。まず、仮想ディレクトリを手動で作成し、SVCが配置されているディレクトリをポイントしました。これはうまくいきませんでした。理由はわかりません。

次に、Visual Studioに移動してサーバー設定を変更しました(プロジェクト、プロパティ、Webを右クリックし、Use local IIS Web ServerをクリックしてCreate Virtual Directoryをクリックします。これを実行すると、IISと上記のコード。

12
Martijn

解決

IISでサービスを動作させませんでした。まず、仮想ディレクトリを手動で作成し、SVCが配置されているディレクトリをポイントしました。これはうまくいきませんでした。理由はわかりません。

次に、Visual Studioに移動してサーバーの設定を変更しました(プロジェクト、プロパティ、Webを右クリックし、[ローカルを使用] IIS Webサーバーをクリックして、[仮想ディレクトリを作成]をクリックします。これを行ったとき、上記のコードでIISの下で動作しました。

5
Martijn

まず、クライアントの[DataContract]属性を削除します。

次に、再コンパイルして、仮想ディレクトリの/ binディレクトリにWcfServiceLibrary.dllがあることを確認します。

構成では、このエンドポイントをメタデータ交換に使用する必要があります。

<endpoint address="mex" 
    binding="mexHttpBinding" 
    contract="IMetadataExchange"/>
7

サービスの実装としてデータコントラクトを参照します。それは無効です。

[DataContract]
public class Client : ICarePlanActions
{

<service behaviorConfiguration="CarePlanService.Service1Behavior"
      name="WcfServiceLibrary.Client">

これを変更して、サービスの実装を参照してください!サービスの実装はどのように見えますか?

おそらく、ClientクラスからDataContract属性を削除するだけです。また、これは「クライアント」ではなく、サービスの実装です。

2
Alex
  1. "\%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -iを実行します

  2. 仮想ディレクトリを削除して、もう一度作成します。

0
Rooz

Service.svcファイルでサービス名を確認するだけです

<ServiceHost Language="C#" Debug="true" Service="SvcCalculator.**Calculator**"
           CodeBehind="**Calculator.svc.cs**" %>

うまくいくことを願っています。

0
user3653166

サービスnamespace、およびサービスclassの名前がApp.configファイルに対応していることを確認します。

 <system.serviceModel>
  <services>
   <service name="WcfCustomLibrary.Service1">
    <Host>
      <baseAddresses>
        <add baseAddress = "http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary/Service1/" />
      </baseAddresses>
    </Host>
   </service>
  </services>
 </system.serviceModel>


namespace WcfCustomLibrary
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together.
public class Service1 : IService1
{