2009-05-08 18 views
0

私はテストプロジェクトWCFサービスライブラリを持っており、プロジェクトを公開しました。すべての適切なインストールを備えた2003サーバをお持ちください。私は自分のアプリケーションを参照し、.svcをクリックするとこのエラーが出ます。WCFサービス、C#、WCF、VS2008を展開します。

ServiceHostディレクティブのService属性値として提供された 'SearchService'タイプが見つかりませんでした。

これは私のweb.configファイルからの抜粋

<endpoint address="" binding="wsHttpBinding" contract="TestService.ISearchService"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 

マイインタフェースです:

[ServiceContract] 
public interface ISearchService 
{ 
    [OperationContract] 
    string GetName(); 
} 

私の実装:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)] 
public class SearchService :ISearchService 
{ 
    #region ISearchService Members 

    public string GetName() 
    { 
     returnn "HAL-2001" 
    } 

} 
+0

を見てみましょうサービスクラス。 –

答えて

0

あなたのクライアントコードの呼び出しは何ですか?これを行うには、次のようなプロキシクラスを呼び出す必要があります。

class SearchServiceProxy : ClientBase<ISearchService>, ISearchService 
{ 
    public string GetName() 
    { 
     return Channel.GetName(); 
    } 
} 
+0

アントニオ、 私はクライアントのところまで来ていません。私はIISを使って閲覧し、Webページでは.svcファイルをクリックして、エラーが発生したときです。私はこれが私の展開上の問題かもしれないと思っています。それは私が –

2

まあ、wsHttpBindingは、SOAPを使用してサービスに接続する必要があります - あなたは.SVCファイルを参照するとき、それは働いていない理由ですので、単独のWebブラウザは、それをカットされません。そこには何も間違っていません。

サービスに接続してテストするには、本当の本格的なSOAPクライアントを作成する必要があります。また、VS2008\Common7\IDEフォルダにあるWcfTestClient.exeテストクライアントを使用することもできます。

マルク・

+0

marc_sで必要とするいくつかの助けです:ありがとう、私はWcfTestClientアプリケーションでそれを見ることができました。私の方法を呼び出すと、私はこれを受けました。「呼び出し側はサービスによって認証されていませんでした。エラー –

+0

"PerSession"インスタンスを使用している特別な理由はありますか?最も簡単な方法は、何も指定せずに "PerCall"インスタンスを使用することです。また、この認証の問題は、サービスのサーバーの設定から来る可能性があります。間違っていることを診断するために私たちにすべてを示す必要があります。 –

1

あの、あなたは必ずすべてが動作されていることを確認するためにbasicHttpBindingとテストに切り替える必要があります。あなたはWSHttpBindingを使用しており、デフォルトでは認証が有効になっています。あなたはクライアントが実際に応答を得るためにクレデンシャルを渡す必要があります。そのため、ブラウザの呼び出しは機能しません。

2

このエラーは、ホストがweb.configのサービス実装 "SearchService"の定義を見つけられなかったことを示します。 web.configでは、<サービス>タグに<エンドポイント>タグをラップする必要があります。 <サービスの名前属性>はSearchServiceクラスのフルネーム(すべての名前空間を含む)に設定する必要があります。また、サービスがブラウザにWSDLを表示できるように動作を定義する必要があります。サービスをサーバーに展開するときに、< dns value = "localhost" />を削除することもできます。ここで

は例の抜粋である、あなたの<サービスにSearchServiceの完全なクラス名を置くことを確認してください>タグ、およびまた完全なクラス名は、あなたの.SVCファイルであることを確認してください。

<system.serviceModel> 
<services> 
    <service name="SearchService" behaviorConfiguration="ServiceBehavior"> 
    <endpoint address="" binding="wsHttpBinding" contract="TestService.ISearchService"> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <!-- 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> 
関連する問題