0

私はここや他の場所で一日中探していたので、冗長性を許してください.

シナリオは、それぞれが独自のプロジェクトで複数の ServiceContracts を提供する 1 つのサービスです。

私は単純に始めています。私のソリューションでは、WCF ServiceLibrary とクラス ライブラリ、および既定の構成ファイルのみを使用しています。

というソリューションに別のプロジェクトがありますWCF_Sandbox.Greeting。アセンブリ名は WCF_Sandbox.Greeting.dll です。

そのプロジェクトには、クラス IGreeting (ServiceContract として装飾されている) と、実装クラスの Greeting があります。

サービスを介して公開する方法を取得するのに本当に苦労しています。SayHello()IGreetingWCF_Sandbox

私はどちらかを取得し続けます

「このサービスは、によって実装されたサービスにリストされていません...」

エラー、またはそのエラー

メタデータはありません。

この他のプロジェクトからサービスを取得して WCF_Sandbox サービスに表示する方法を誰かがアドバイスできる場合は、大いに感謝します。これは多くの人が苦労している基本的な質問のようですが、どこにも簡単に答えられているのを見たことがありません. どうもありがとう!

app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
  <service name="WCF_Sandbox.Service1">
    <host>
      <baseAddresses>
        <add baseAddress = "http://localhost:8733/Design_Time_Addresses/WCF_Sandbox/Service1/" />
      </baseAddresses>
    </host>
    <endpoint address="" binding="basicHttpBinding" contract="WCF_Sandbox.IService1">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
4

2 に答える 2

0

@Tim が述べたように、コードが役立つ場合があります。

次の手順をお勧めします。

1)。プロジェクトの参照を確認してください (@Tim が推奨) - 既に行っていると思います

2)。私が間違っているかもしれませんが、サービス コントラクトが IGreeting の場合、エンドポイントには Service1 ではなく IGreeting が含まれている必要があり、次のようになります。

... endpoint address="" binding="basicHttpBinding" contract=" WCF_Sandbox.IGreeting "

3)。コントラクト プロパティに完全修飾インターフェイス名 (つまり、完全な名前空間 + インターフェイス名) があることを確認します。

4)。WCF 構成ツール (Visual Studio ツール -> メニューから利用可能) を使用してコントラクトを手動で選択してから、構成ファイルを確認してください。

于 2013-04-11T04:31:47.060 に答える
0

あなたが達成しようとしていることを理解していると思います-ライブラリを介してサービスを他のコードから分離したい-それはすべてうまくいっていますが、いくつかの基本的な誤解があると思います. あなたの経験の全体的なレベルがどの程度かはわかりませんので、私が言っていることがあなたがすでに知っている、または理解していることである場合は、ご容赦ください.

まず、ライブラリは実行可能なコードではありません。(私が認識している) ライブラリを使用する唯一の方法は、実行中のプログラムにライブラリを使用させることです。ソース コードのコピーを複数持つことなく、複数のアプリケーション間でコードを共有する方法を提供します。WCF の用語では、コントラクトをホスティング アプリケーションから分離する方法です。

したがって、あなたの場合、既にライブラリを作成しているように思えます (ちなみに、WCF サービス ライブラリクラス ライブラリです。これは、WCF を起動して実行するための別のプロジェクト テンプレートです)。

次に行う必要があるのは、サービスをホストすることです。これは、IIS、Windows サービス、または自己ホスト型アプリケーションを介して行うことができます。たとえば、IIS でサービスをホストする場合は、サービスをホストする予定の仮想ディレクトリ/アプリケーションの bin フォルダーに、サービスを含むライブラリ (DLL) を配置します。次に、サービスの *.svc ファイルを仮想ディレクトリ/アプリケーションのルートに追加し、ServiceModel セクションをデフォルトの app.config ファイルから web.config ファイルにコピーします。

サービスを使用するには、(サービスを使用するプロジェクトで) Visual Studio を使用してサービス参照を追加するか、SvcUtil を使用してプロキシを生成し、それをクライアント プロジェクトに含めます。

要するに、私があなたの設定を正しく理解していれば、あなたは途中までです。サービスをホストし、それを利用するクライアントを作成するだけです。

ここで取り上げていないことはたくさんあります。これは、あなたがやろうとしていると私が考える方法の 1 つにすぎません。

Microsoft の入門チュートリアル(特に、クライアントのホスティングと作成に関する部分)を読むことを強くお勧めします。

これで混乱が解消されることを願っています。WCF はさまざまなオプションとフレーバーで優れていますが、学習曲線が急になることもあります。

于 2013-04-12T06:22:33.443 に答える