2009-03-27 18 views
50

The contract name 'IMyService' could not be found in the list of contracts implemented by the service 'MyService'.. ---> System.InvalidOperationException: The contract name 'IMyService' could not be found in the list of contracts implemented by the service 'MyService'.WCF契約名 'IMyService'が見つかりませんでしたか?

これは私を夢中にしています。私は私の開発マシンで動作するWCF Webサービスを持っていますが、テスト用に使用している仮想マシンにコピーすると、インターフェイスを実装していないと思われるエラーが表示されますが、サービスは私のWindows xp IIS上で動作するので感覚。仮想マシンはWindows Server 2003 IISを使用します。何か案は?

ここで注意すべき点の1つは、クライアントとしてWebブラウザでサービスにアクセスしようとしている最中でも、このエラーがVM上で発生することです。

注:私はprincipalPermissionMode = "UseWindowsGroups"を使用していますが、ローカルマシンでは問題ありません。私はちょうど適切なウィンドウグループに自分自身を追加します。しかし、私のVMに運がない。

設定:

<configuration> 
    <system.serviceModel> 
     <diagnostics> 
      <messageLogging logEntireMessage="false" maxSizeOfMessageToLog="2147483647" /> 
     </diagnostics> 
     <services> 
      <service behaviorConfiguration="MyServiceBehaviors" name="MyService"> 
       <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" 
        name="MyService" bindingName="basicHttpBinding" bindingNamespace="http://my.test.com" 
        contract="IMyService"> 
       </endpoint> 
      </service> 
     </services> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="basicHttpBinding" maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxStringContentLength="2147483647" /> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Windows" proxyCredentialType="None" /> 
        </security> 
       </binding> 
      </basicHttpBinding> 
      <netTcpBinding> 
       <binding name="WindowsClientOverTcp" maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxStringContentLength="2147483647" /> 
       </binding> 
      </netTcpBinding> 
      <wsHttpBinding> 
       <binding name="wsHttpBinding" maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
         maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       </binding> 
      </wsHttpBinding> 
     </bindings> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="MyServiceBehaviors"> 
        <serviceMetadata httpGetEnabled="true" /> 
        <serviceAuthorization principalPermissionMode="UseWindowsGroups" 
         impersonateCallerForAllOperations="false" /> 
        <serviceCredentials /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
    </system.serviceModel> 
</configuration> 
+0

インターフェイスが表示されているアセンブリがアプリケーションに表示されていますか?また、設定ファイルのインターフェース名の一部として名前空間を指定しましたか? – casperOne

答えて

0

あなたがIISであなたのVM上に設定されたすべての認証を持っていますか?匿名に設定して、実行されているかどうかを確認してください。

+0

私は匿名を試み、iisを再起動しました。まだ同じエラー。 thx – M3NTA7

+0

あなたはあなたのsystem.serviceModel設定セクションを投稿できますか? – bendewey

+0

上記の投稿にsystem.serviceModelを追加しました。見てください。 – M3NTA7

0

これは私の質問を本当に満足させるものではありませんが、解決する方法の1つは.NET 3.5をインストールすることでした。私の他の環境の両方に3.0があったからです。

だから私は本当になぜそれが1つの環境では動作し、他の環境では動作しないのか、特にそのインタフェースエラーでは判断しませんでした。

1

あなたのインターフェイスのコードを投稿できますか? 通常これは、インターフェイスにServiceContract属性が指定されていない場合に発生します。

8

エンドポイントのコントラクト属性は完全修飾ネームスペースである必要はありませんか?

+1

これは私の問題でもありました。混乱していたのは、オンラインの多くの例に名前空間が含まれていなかったことです。 – angularsen

+0

これも私の問題の解決策でした。 – yonexbat

6

はい@ギャリーあなたが正しいです。エンドポイントでの 契約はあなたのServiceContract属性はConfigurationNameを定義する場合、これはない完全に、エンドポイントでの値である必要があります

<endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBinding"  name="MyService" bindingName="basicHttpBinding" bindingNamespace="http://my.test.com" contract="Namespace.IMyService"> 
32

@Garry(少し遅れて、私が知っている)

完全修飾名でなければなりません修飾された名前。私はちょうど今OPに記載されているようにこの問題を抱えていました。これが私にとっての解決策でした。これは、これを横切って誰か他の誰かを助けることを願っています。

+2

この回答は私の問題解決に役立ちました。契約インタフェース上の 'ServiceContractAttribute'は' Name'、 'Namespace'、' ConfigurationName'の値を定義していました。実装するサービスのweb.configの 'endpoint'要素に' name'、 'bindingNamespace'と' contract'を変更して問題を解決しました。 – GiddyUpHorsey

+0

これは私がこれを見つけ出すまで30分かけてレンガの壁から私の頭を叩いていました。 – bplus

+0

は構成バインディングを変更しましたが、ServiceContract属性のConfigurationNameにこの問題がありました。名前の競合を解決するのが解決策でした。 – Erikest

101

[ServiceContract]が私のケースでは見つかりませんでした。

+0

でも私の場合:) –

+0

これも私に起こりました。エラーが非常にはっきりしていないので、app.configを確認するのに数分を費やしました:\。 – Megacan

+6

ARGH !!!!すべての地獄にくそー、...私はこのすべての時間を浪費する時間に巻き込まれる!ありがとう:-) – Stimul8d

13

これは、同じエラーで私の状況に適用もう少し珍しいソリューション、次のとおりです。

それが契約名前空間には、以下の属性で、無効にすることができている可能性があります:希望

[System.ServiceModel.ServiceContractAttribute([...], ConfigurationName = "IServiceSoap")] 
public interface ISomeOtherServiceName 

必要:

<endpoint address="" binding="basicHttpBinding" contract="IServiceSoap" /> 

ではなく通常の(名前空間)がを.ISomeOtherServiceName。

これは、コード生成の結果であり得る、私の場合WSCFBlue

+1

これは私の場合でした構成は2時間後に解決する混乱を作成しました –

1

に私は同じエラーがあったが、問題の原因は異なっていました。私は勉強していました。まず、Visual StudioのSilverlightテンプレートからSilverlight対応のWCFサービスを使用してサービスを作成しました。私はこのTerritoryServiceを呼び出しました。あなたは、web.configファイルを以下のように変更され、この方法でサービスを作成する場合:

<services> 
     <service name="Services.TerritoryService"> 
     <endpoint address="" binding="customBinding" bindingConfiguration="Services.TerritoryService.customBinding0" 
      contract="Services.TerritoryService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 

をImがオフに働いていることを例として、しかしDomainServices.i.eを使用しています。これらを使用すると、DomainServiceから継承されます。そこで作成したTerritoryServiceを削除し、Visual StudioのWebテンプレートメニューからテンプレートからDomainServiceクラスを作成しました。私は仕事を続けて、すべてがうまくコンパイルされました。しかし、私はそれを実行したときに、この質問のタイトルごとにエラーが発生しました。

ドメインサービスから継承すると、そのようなエントリはweb.configファイルに作成されません。それは必要ありません。しかし、Silverlight対応のWebサービスを介して作成されたサービスを削除すると、web.configファイルのエントリは削除されません。

サービスが呼び出されたときに両方のサービスにTerritoryServiceという名前が付けられていたため、web.config内のエントリが再生され、サーバーはその方法で定義されたサービスを探していましたそれを削除しました。

解決策は、構成ファイルでVisual Studioによって自動的に作成されたが、サービスを削除したときにVisual Studioによって自動的に削除されなかったエントリスタブを単純に削除することでした。私がしたら、問題は解決しました。

「競合」という名前が付けられているので、これを実行するのに30分かかりました。それは非常に正しい "見え"、多くの例に沿っていました。したがって、ドメインサービスクラスを継承している場合は、wcfサービスを作成したときと同じように、設定ファイルにエントリが必要ない/必要がありません。

+0

これは私を導いた正しい道。 1)通常のWCFサービスを作成しました(web.configを更新しました)。 2)その後、私はそのサービスを削除しました。 3)その後、同じ名前のWCFデータサービスを作成しました。 web.configの変更を削除すると修正されました。 –

0

は、私の場合は2つのミスをあります:

  1. セクションは別のプロキシプロジェクトからコピーされ、私は完全なパスに名前空間を変更するのを忘れている設定。

  2. クライアントとして、エンドポイントセクションをサービスノードにコピーしました。クライアントもwcfサービスです。私はこれを行うための習慣を持っている

3

...

<system.serviceModel> 
    <services> 
     <service name="Service" behaviorConfiguration="wsHttpBehaviour"> 
     <endpoint 
      binding="wsHttpBinding" 
      contract="IService" 
      bindingConfiguration="wsHttpBinding" 
      /> 
     <endpoint contract="IService" binding="mexHttpBinding" address="mex" /> 
     </service> 

私はこれを行う必要があります...

<system.serviceModel> 
    <services> 
     <service name="namespace.Service" behaviorConfiguration="wsHttpBehaviour"> 
     <endpoint 
      binding="wsHttpBinding" 
      contract="namespace.IService" 
      bindingConfiguration="wsHttpBinding" 
      /> 
     <endpoint contract="namespace.IService" binding="mexHttpBinding" address="mex" /> 
     </service> 

は、私が何を意味するか見る それは非常識です(特にアプリに1〜2個のアイテムしかない場合)、「完全修飾」クラス名はすべての違いを生むようです。

8

service要素のname属性とendpoint要素のcontract属性が正しくありません。

<service name="namespace.MyService"> 
     <endpoint contract="namespace.IMyService" > 

値を変更してエラーを解決する必要がある場合は、完全修飾名にする必要があります。

+0

この設定は正しいです。 +1000 – CompanyDroneFromSector7G

1

私の場合、問題は誤った名前空間でした。 HTH

1

「追加」 - >「サービス」メニューオプションを使用すると、私のWeb設定セクションが作成されましたが、「エンドポイント」の「契約」がインターフェイスではなく具体クラスの名前に設定されています。

私が修正したらすぐに、すべての作業が開始されました。

関連する問題