WCFエラー-コントラクト 'UserService.UserService'を参照するデフォルトのエンドポイント要素が見つかりませんでした


98

これを修正する方法はありますか?

UserService.UserServiceClient userServiceClient = new UserServiceClient();
            userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
            userServiceClient.GetUsersAsync(searchString);

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_UserService" 
                     maxBufferSize="2147483647" 
                     maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:52185/UserService.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="BasicHttpBinding_UserService" 
                  contract="UserService.UserService"
                  name="BasicHttpBinding_UserService" />
    </client>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Shell.Silverlight.Web.Service3Behavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior" 
                 name="Shell.Silverlight.Web.Service3">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="Shell.Silverlight.Web.Service3" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

ServiceModelクライアント構成セクションで、コントラクト 'UserService.UserService'を参照するデフォルトのエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素で見つからなかったことが原因である可能性があります。

解決しました!

これがSilverlightアプリケーションであることについては触れませんでした。独自の "ServiceReferences.ClientConfig"ファイルを持つDLLにwcf参照がありました。DLLのServiceReferences.ClientConfigの内容をメインのSilverlightプロジェクトに移動し、それが機能しました。


DLLを実行しているアプリケーションがサードパーティである場合、たとえばDLLが別のアプリケーションのプラグインである場合はどうなりますか?
Stefanos Kargas 16

回答:


186

私は同じ問題に遭遇しました。私のアプリケーションもSilverlightアプリケーションであり、サービスはクラスライブラリから使用されていたカスタムUserControlで呼び出されていました。

解決策は簡単です。エンドポイント定義をクラスライブラリの構成ファイル(ServiceReferences.ClientConfigなど)からSilverlightアプリケーションの構成ファイルにコピーします。これを行わなくても機能することを期待しているのは知っていますが、どうやらレドモンドの誰かがその日休暇を取っていたようです。


50
このソリューションはASP.NETおよびMVCプロジェクトにも有効です。クラスライブラリにサービスを追加する場合、ボックスは機能しません。ライブラリプロジェクトのapp.configからsystem.serviceModelセクションを取得し、web.configに配置します。
アダム教皇

5
これはあらゆる種類のプロジェクトに当てはまるようです。私は、Windowsサービスとしてquartz.netを使用しており、Webサービスを参照している別のアセンブリで仕事をしていました。それも私のために働いた。どうも。
thiagoleite 2012

2
こんにちは。WindowsPhoneプロジェクトでも機能しました。@thiagoleiteが言うように、ほとんどのプロジェクトタイプで機能しているようです。
Thanushka

3
レドモンドの休暇のジョークの+1 ...とにかく、それを外部ファイルとして追加する方法はありweb.configませんか?
Shimmy Weitzhandler、2015年

1
@sprite Vishalの答えとして、必要な設定をコードで設定することになりました(クライアントコンストラクターをオーバーライドしました)。このようにして、アセンブリ間で出荷されます。ありがとう!
Shimmy Weitzhandler 2015年

45

クラスライブラリでこれらの値をプログラムで設定することもできます。これにより、ライブラリ間での構成ファイルの不必要な移動が回避されます。単純なBasciHttpBindingのサンプルコードは-

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);

@wooncherk、私のクラスライブラリにはwsdlへの参照しかありません。このコードはどこに置くべきですか?私はそれをC#dllに構築し、そのdllを自分のアプリファイルに入れ、IronPythonから参照します。ありがとう
Срба

12

WPF(WCFまたはSilverlightではなく)を使用しているときに誰かが同じ問題に遭遇した場合に備えて:

Webサービスに接続するときに、このエラーが発生しました。私のコードが「メイン」のWPFアプリケーションソリューションにあったとき、問題はなく、完全に機能しました。しかし、コードをより適切なDALレイヤーソリューションに移動すると、例外がスローされます。

ServiceModelクライアント構成セクションで、コントラクト 'MyWebService.MyServiceSoap'を参照するデフォルトのエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素で見つからなかったことが原因である可能性があります。

このスレッドの「スプライト」で述べたように、手動でタグをコピーする必要があります。

WPFアプリの場合、これは、私のDALソリューションのapp.configからメインのWPFアプリケーションソリューションのapp.configにタグをコピーすることを意味します。


これはすばらしいことですが、「アダムポープ」と同じように、自分の回答の下に短いコメントを書いておくとよいでしょう。それはもっと多くの人に読まれるでしょう。
スプライト

2
@sprite:コメントを追加しましたが、StackOverflowコメントは常に1つの長い段落としてのみ表示されます。私のような5段落の返信の場合、1つの長い、判読できない、不親切な段落になります。別の応答を書くことで、他のユーザーを助ける可能性が高い明確な答えを出すことができました(正直に言うと、このようなWebサイトのポイントです)
Mike Gledhill

6

サービスを最初に追加したときに、何らかの理由でVisual StudioがWeb構成を更新しなかったため、同じ問題が発生しました。サービスリファレンスを更新すると、この問題も修正されることがわかりました。

手順:

  1. サービス参照フォルダに移動します
  2. 拡大する
  3. 右クリックして更新サービス参照を選択
  4. Web Configが更新されることを確認します。

はい、これでうまくいきました。サードパーティのwsdlサービス参照を使用していて、サービス参照を更新するまでこのエラーが発生しました
ejhost

僕にも。それは正常に動作し、突然動作しないため、それは明らかでした。変更を加えた可能性があり、サービス参照を更新しませんでした。
ehh

4

WCFサービスのweb.configを "endpoint address =" "binding =" basicHttpBinding "..."(以前はbinding = "wsHttpBinding")に変更します。アプリをビルドした後、 "ServiceReferences.ClientConfig"で "" configuration>の値は。その後、それは正常に動作します。


3

svcutil.exeによって生成されたoutput.configの名前をapp.configに変更します。それは私のために働いた。


2

「UserService」クラスが実装するインターフェースはありますか?

エンドポイントでは、contract属性のインターフェースを指定する必要があります。

contract="UserService.IUserService"


1

それが本当に問題であるかどうかはわかりませんが、バインディング構成に同じ名前が付いているようです()。

私は通常、「UserServiceBasicHttp」などのエンドポイントを呼び出そうとし(「Binding」は実際にはここで何もする必要はありません)、「.... Configuration」を使用してバインディング構成を呼び出します。たとえば、 「UserServiceDefaultBinding」:潜在的な名前の衝突を回避します。

マーク


0

サービスを機能させるには、呼び出し元のApp.configファイルにサービスを追加する必要がありました。結局それがあなたであることを確認してください。これは私にはうまくいったようです。


0

この問題は、他のアプリケーションを介してサービスを使用するときに発生します。アプリケーションに構成ファイルがある場合は、このファイルにサービス構成情報を追加してください。私の状況では設定ファイルがなかったので、この手法を使用して問題なく動作しました。URLアドレスをアプリケーションに格納し、それを読み取り、BasicHttpBinding()メソッドを使用して、サービスアプリケーションにパラメーターとして送信します。これは、私が行った簡単なデモですそれ:

Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());

var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);


SimpleService.PayPointSoapClient client = 
    new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(), 
    remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);

0

それらの人の仕事のためにAX 2012 AIFのサービスとそこに呼び出すしようC# AXの内部やVBプロジェクトを(X ++)とのようなエラーに苦しむ「デフォルトのエンドポイントを見つけることができなかった」 ...または「無契約が見つかりません」 ...戻りますビジュアルスタジオ(c#)プロジェクトにこれらの行を追加してからサービスクライアントを定義してから、プロジェクトをデプロイしてAXクライアントを再起動して再試行してください。例はNetTcpアダプター用であり、必要に応じて他のアダプターを簡単に使用できます。 。

 Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
 NetTcpBinding Binding = new NetTcpBinding();
 EndpointAddress EndPointAddr = new EndpointAddress(Address);
 SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);

-2

PRISMフレームワークを使用してWPFアプリケーションを使用している場合、構成は起動プロジェクト(つまり、ブートストラップが存在するプロジェクト)に存在する必要があります。

つまり、クラスライブラリから削除して、スタートアッププロジェクトに入れます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.