なデフォルトの評価項目の要素
-
20-08-2019 - |
質問
いくらいが丁度いいのロ索し、VS2008/.純3.5。構築に際するサービスです。純投このエラー:
なデフォルトの評価項目の要素を参照契約'IMySOAPWebServiceのServiceModelお客様の構成です。これがconfiguarationファイルが明らかとなったアプリケーションやまないため評価項目の要素マッチングはこの契約の中に見出されると論じている顧客の要素となります。
検索するこのエラーからのフル名前空間の契約になります。ここでの私のアプリです。config完全な名前空間:
<client>
<endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>
私は走XP地(このことについても触れまでのGoogleヒットもwin2k3) のアプリです。configコピーされます。exe.configでも問題は発生しない。
他のヒン?
解決 3
テストしたいくつかのオプションを持って、私は最終的に使用してこれを解決します。
契約= "IMySOAPWebService"
すなわち。 configに完全な名前空間を持ちません。何らかの理由で完全な名前が正しく解決しませんでした。
他のヒント
「あなたはクラスライブラリのサービスを呼び出し、別のプロジェクトからのクラスライブラリを呼び出している場合、このエラーが発生することができます。」
この場合、あなたは、メインプロジェクトにapp.configをそのwinappまたはweb.configファイルにそのWebアプリケーションであればあればWSの構成設定を含める必要があります。これもPRISMとWPF / Silverlightので移動するための方法である。
私は、バインディングとエンドポイントアドレスインスタンスを自分で作成することによって、(私は他の人が示唆していることと思う)これを解く - 私はこれは、いくつかの既存のライブラリのコードを置き換えるものです(設定ファイルに新しい設定を追加したくなかったので、広く使われている、と以前に古いWebサービスリファレンスなどを使用)、およびので、私はどこにでも新しい設定の設定を追加することなく、これを中にドロップできるようにしたかったのです。
var remoteAddress = new System.ServiceModel.EndpointAddress(_webServiceUrl);
using (var productService = new ProductClient(new System.ServiceModel.BasicHttpBinding(), remoteAddress))
{
//set timeout
productService.Endpoint.Binding.SendTimeout = new TimeSpan(0,0,0,_webServiceTimeout);
//call web service method
productResponse = productService.GetProducts();
}
編集
あなたは、HTTPSを使用している場合は、あなたはBasicHttpsBinding
ではなくBasicHttpBinding
使用する必要があります。
私はこの同じ問題を持っていました。これは、Web参照のために、あなたは、コンストラクタの最初のパラメータとしてURLを供給する必要があることが判明します:
new WebService.WebServiceSoapClient("http://myservice.com/moo.aspx");
新しいスタイルのWebサービス参照のために、あなたは構成内のエンドポイントのエントリを参照名を指定する必要があります:
new WebService.WebServiceSoapClient("WebServiceEndpoint");
Web.config
内の対応するエントリと又はApp.config
:
<client>
<endpoint address="http://myservice.com/moo.aspx"
binding="basicHttpBinding"
bindingConfiguration="WebService"
contract="WebService.WebServiceSoap"
name="WebServiceEndpoint" />
</client>
</system.serviceModel>
かなり気ハード「それは古いプログラムで働いていた」上にトンネルビジョンを削除するには...
あったかのような状況の中、私た
- WCFサービス主催のどこかに
- 主なプロジェクト
- 消費者のプロジェクトタイプ'ララ'るサービスへの参照は、WCFサービス
- 主とを呼びかけるプロジェクトの方法から消費者のプロジェクト
現在、消費者のプロジェクトはすべて、関連する構成設定 <system.serviceModel>
タグのアプリです。config、ただ投げをしています。
すべての私が追加され、同じタグ <system.serviceModel>
本プロジェクトのアプリです。設定ファイルを最小化することによりいます。
現実の問題と私の場合は、この誤った設定ファイルを指定します。ではなく消費者のアプリです。configでした主projのconfig.かかったとのことで時間を図る。
「あなたはクラスライブラリのサービスを呼び出し、別のプロジェクトからのクラスライブラリを呼び出している場合、このエラーが発生することができます。」
"この場合、あなたはそのwinappまたはweb.configファイルにそのWebアプリケーションの場合ならばapp.configをメインプロジェクトにWSの構成設定を含める必要があります。これもPRISMとWPF / Silverlightので移動するための方法であります。 "
はい、しかし、あなたがメインのプロジェクト(例えばオーチャードCMS)を変更することができない場合、あなたはあなたのプロジェクトにWCFサービスの設定を維持することができます。
あなたは、クライアントの生成方法でサービスのヘルパーを作成する必要があります:
public static class ServiceClientHelper
{
public static T GetClient<T>(string moduleName) where T : IClientChannel
{
var channelType = typeof(T);
var contractType = channelType.GetInterfaces().First(i => i.Namespace == channelType.Namespace);
var contractAttribute = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false).First() as ServiceContractAttribute;
if (contractAttribute == null)
throw new Exception("contractAttribute not configured");
//path to your lib app.config (mark as "Copy Always" in properties)
var configPath = HostingEnvironment.MapPath(String.Format("~/Modules/{0}/bin/{0}.dll.config", moduleName));
var configuration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configPath }, ConfigurationUserLevel.None);
var serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);
if (serviceModelSectionGroup == null)
throw new Exception("serviceModelSectionGroup not configured");
var endpoint = serviceModelSectionGroup.Client.Endpoints.OfType<ChannelEndpointElement>().First(e => e.Contract == contractAttribute.ConfigurationName);
var channelFactory = new ConfigurationChannelFactory<T>(endpoint.Name, configuration, null);
var client = channelFactory.CreateChannel();
return client;
}
}
と、それを使用します:
using (var client = ServiceClientHelper.GetClient<IDefaultNameServiceChannel>(yourLibName)) {
... get data from service ...
}
をhref="http://www.tikalk.com/net/keep-wcf-client-configuration-class-library-appconfig/">参照してください。
この1は狂気私を運転します。
私が使用しているWCFとSilverlight 3のプリズム(CAB)
私はプリズムモジュールでWCFサービスを呼び出すと、私は同じエラーを取得します:
契約を参照するデフォルトのエンドポイント要素を見つけることができませんでした サービスモデルのクライアントconfiguarationセクションの「IMyService」。この 何configuarationファイルは、アプリケーションが見つかりませんでした可能性がありますので、 またはこの契約に一致するエンドポイント要素が見つかりませんでしたので、 クライアント要素内の
これは、そのモジュールのServiceReferences.ClientConfigファイルで、ServiceReferences.ClientConfigファイルのシェルのの.xapファイルにない探していることが判明しました。私は(それはそれ自身のWCFサービスを呼び出す)私のエンドポイントを追加し、私のSilverlightのシェルアプリケーションで既存のServiceReferences.ClientConfigファイルに結合します。
それから私は私のWebプロジェクトのClientBinフォルダのための新しいの.xapファイルを生成するシェルアプリを再構築しなければならなかった。
さて、このコード行は、最終的に動作します:
MyServiceClient myService = new MyServiceClient();
複数の対応をここに正解が直面創出をもたらすものであります。numbingly示の誤差を参照のサービスからクラスファイル:コピーサービスをconfig情報へのアプリです。configます。configのコンソールまたはwindowsアプリです。無回答そういったコピーしますが。試してみては正しい。
ここでは、コピーして自分のクラスライブラリのコンフィグファイルは、私のコンソールアプリケーションのconfigファイルを得るためにこのクレイジエラーのためのサービスを書いている"TranslationServiceOutbound".
基本的にしたいもの システム。serviceModel 部署:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ITranslationServiceOutbound" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://MyHostName/TranslationServiceOutbound/TranslationServiceOutbound.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITranslationServiceOutbound"
contract="TranslationService.ITranslationServiceOutbound" name="BasicHttpBinding_ITranslationServiceOutbound" />
</client>
私は、WCFサービスは、binフォルダ内の参照.dllファイルとしてASP.NETアプリケーションに追加されたクラスライブラリに追加されたASP.NETアプリケーション内で、このエラーを得ていました。エラーを解決するには、WCFサービスを参照するクラスライブラリ内のapp.configファイルのconfig設定は、ASP.NETサイト/アプリのweb.configの設定にコピーする必要がありました。
(私はクラスライブラリのインターフェイスを使用していただけでなく、クライアントUIのApp.configファイルへのコピーとして)私が見つけた私は私がでServiceReference
ある(サービス参照の名前でバインディングの名前の前に付ける必要がありました以下)。
例えば:ます。
<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISchedulerService"
contract="ServiceReference.ISchedulerService"
name="BasicHttpBinding_ISchedulerService" />
デフォルトの代わりに生成されます:
<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISchedulerService"
contract="ISchedulerService"
name="BasicHttpBinding_ISchedulerService" />
私は同じ問題を抱えていたが、契約の名前空間を変更することは私のために動作しませんでした。だから私は、代わりに.NET 3.5サービス参照のネット2スタイルのWeb参照を試してみました。それは働いています。
は、Visual Studio 2008でWeb参照を使用して「サービス参照の追加]をクリックし、ダイアログボックスが表示されたら、その後、「詳細」をクリックしてください。その中で、あなたが代わりにサービス参照のWeb参照を使用できるようになるオプションがあります。
ユニットこの問題が発生する可能性がありますサービスを消費非ライブラリアプリケーションをテストします。
他の人がアドレスにこのの根本原因を入力して情報。あなたが自動化されたテストケースと、あなたが実際にサービス・インターフェースを呼び出すテストしているユニットを作成しようとしている場合は、テストプロジェクトにサービス参照を追加する必要があります。これは、エラーのライブラリタイプを使用したアプリケーションの風味です。インターフェースを消費し、私のコードは、のライブラリのではないので、私はすぐにこのかかわらず、実現しませんでした。テストが実際に実行したときしかし、それはテストアセンブリ、テスト対象ではないアセンブリから実行されます。
ユニットテストプロジェクトにサービス参照を追加し、私の問題を解決します。
私はユニットテストの状況を持っています。私はユニットテストプロジェクトのapp.configファイルをコピーしました。だから、ユニットテストプロジェクトは、エンドポイントの情報が含まれています。
私は一度、この問題に直面しました。私はまだWCFサービスを使用するインターフェイスを開発していたからです。私は、テストアプリケーションと継続的な開発を構成しました。その後の開発では、私は、サービスの名前空間の一部を変更しました。 WCFのクラスに一致するようにweb.configファイルで「 - >クライアント - - >エンドポイント>契約system.serviceModelを」だから私はダブルチェック。その後、問題が解決されます。
あなたのconfigに名前空間は、あなたのクライアントのデフォルトの名前空間の後に名前空間のパスの残りの部分を反映すべきです。あなたの投稿の答えに基づいて、私の推測では、あなたのクライアントが「Fusion.DataExchange.Workflows」名前空間になるように設定されていることです。あなたが別の名前空間にクライアントコードを移動した場合、あなたは残りの名前空間のパスに一致するように設定を更新する必要があります。
ただ、同じ問題を持つ他の誰のために。私は私のサービスに接続しようとした私の方法のためのユニットテストを書きました。これは、これと同じ例外を除いて毎回失敗しました - 私はなぜわかりません。私はWinフォームからそれを実行したときにそれが正常に動作します。
私は同じProblem.I'mは、クラスライブラリでWCFサービスを使用し、Windowsアプリケーションからクラスライブラリを呼び出すproject.but私は、同じWindowsアプリケーションプロジェクトの設定ファイルに変更<system.serviceModel>
忘れていまし<=>クラスライブラリのapp.configファイルの。
解決策:外プロジェクト同じクラスライブラリのWCF構成の変更の設定
あなたはあなたのWindowsアプリケーションやコンソールアプリケーション
にapp.configをコピーする必要がありますソリューション:外プロジェクト同じクラスライブラリのWCF構成の変更の設定
私のために働きました
こんにちは、私は同じ問題が発生しましたが、最善の解決策は、クライアント側の設定を構成するには、.NETをさせることです。私は、HTTPのクエリ文字列にサービス参照を追加するときに私は何を発見することはこれです:?/namespace/service.svc WSDL =それは、クライアント側での設定エンドポイントを作成しませんwsdl0。 ?私は、WSDL-wsdl0を削除し、唯一のURLはhttpを使用する場合でも:/namespace/service.svcを、それがクライアント構成ファイルでエンドポイントの設定を作成します。短いremoeのための "?WSDL = WSDL0" ます。
クラスのフィールドとしてサービスクライアント宣言行を入れないでください、 これに代えて、で使用される各メソッドでインスタンスを作成します。 だから、問題が修正されます。あなたはクラスのフィールドとしてサービスのクライアント・インスタンスを作成する場合、エラーが発生した時間をデザイン!
ここであなたは、構成があなたのスタートアッププロジェクトに存在すべきであるPRISMのフレームワークを使用してWPFアプリケーションを使用している場合(つまり、あなたのブートストラップが存在するプロジェクトインチ)
このエラーは、クラスライブラリ内のサービスを呼び出し、別のプロジェクトからクラスライブラリを呼び出している場合に発生することができます。
この問題を修正/作成するには、いくつかの方法があるように思われます。私にとっては、私が使用していCRM製品は、ネイティブコードで記述されており、私の.NET DLLを呼び出すことができますが、私は、メインのアプリケーション上の/であることを必要とするコンフィギュレーション情報に遭遇しました。私にとっては、CRMアプリケーションが.NETではないので、私は私のmachine.configファイル(私はそれを望んでいない場合)にそれを置くためになってしまいました。私の会社は、Websenseのを使用しているのでまた、私もにmachine.congに修正が必要であることに起因407プロキシ認証が必要な問題にサービス参照を追加することに苦労していた。
プロキシソリューション:
私は、メインアプリケーションの設定に私のDLLのapp.configをから情報をコピーする必要がありました(私にとってそれはのmachine.configた)動作するようにWCFサービス参照を取得します。そして、私はまた、その同じファイルにエンドポイント情報をコピーする必要がありました。私はそれが私のために働い始まることをやったらます。
[OK]をクリックします。私の場合は少し切り抜いたが、最終的には私はそれのための修正を発見しました。 I CONSOLE.EXE持っている - > DLL - >起動WS1 - > DLLを - >の呼び出しWS2
推奨されているように私はWS1のサービスモデルの構成、およびConsole.EXE.configでWS2の両方を持っていました。 - 問題を解決するためのdidnt
。しかし、それはまだ動作しませんでした、私はまた、WS1にWS2のの WebReferenceを追加するまで、をするだけでなく、実際に作成し、WS2のプロキシを呼び出すDLLへ。
私は同じ問題を持っていた
私はデスクトップアプリケーションを使用してグローバル天気Webサービスを使用していた。
私は、サービス参照を削除し、Web参照を追加し、問題解決します おかげ
私のためのソリューションは、クライアントのweb.configファイル内のエンドポイント名属性からエンドポイント名を削除することでした これは、プロキシが使用することを許可
ChannelFactory<TService> _channelFactory = new ChannelFactory<TService>("");
のみ動作するように、すべての日を取りました。 最初のエラーが表示されたときにそれが間違っていたが、この修正プログラムは、場所にあった後も、契約名が間違っていました。 その後、契約名の文字列人々のための三重のチェックを倍増! ATTRIB:イアン
私が探しにもう一つを追加することができます。 (トム・ヘーグのの答えはすでにそれを暗示が、私は明示的になりたい)
私のweb.config
ファイルには、次のように定義していた。
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
私はすでに参照用basicHttpsBindingを使用していたが、その後、私はbasicHttpBindingを要する新たな基準(NO S)を添加しました。次のように私がしなければならなかったすべては私のprotocolMapping
にそれを追加しました:
<protocolMapping>
<add binding="basicHttpBinding" scheme="http" />
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
L.R. を正しく指摘するように、、これは右の場所で定義する必要があります。私にとって、それは私のユニットテストプロジェクトのapp.configを1つだけでなく、メインサービスプロジェクトのweb.configファイル内の1つを意味します。
私はグローバルスコープ演算子なしで設定ファイルの要素で契約を参照して、このエラーが発生しました。
すなわちます。
<endpoint contract="global::MyNamepsace.IMyContract" .../>
は動作しますが、
<endpoint contract="MyNamepsace.IMyContract" .../>
が与えるエラー「契約を参照するデフォルトのエンドポイント要素を見つけることができませんでした」。
MyNamepsace.IMyContractを含むアセンブリは、メインアプリケーションとは異なるアセンブリであり、これはグローバルスコープの解像度を使用する必要性を説明することができる。
私は同じエラーを持って、私はいくつかの多くの事をしようとしたがうまくいきませんでした、私は私の「契約」は、全体のプロジェクトのために同じではないことに気づいたよりも、ソリューション内とそれ以外のすべてのプロジェクトで同じになるように、私は契約を変更しました働いていました。 これは、プロジェクトA
であります<client>
<endpoint address="https://xxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference.IIntegrationService" name="basic" />
</client>
プロジェクトB:
<client>
<endpoint address="xxxxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference1.IIntegrationService" name="basic" />
</client>
最後に、私は、両方のために変更しました
<client>
<endpoint address="https://xxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="MyServiceReferrence.IIntegrationService" name="basic" />
</client>
あなたがサービス参照を追加するとき、
あなたが入力している名前空間の用心ます:
あなたはあなたのインターフェイスの名前に追加しなければなりません
<client>
<endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
binding="basicHttpBinding"
contract="MyNamespace.IMySOAPWebService" />
</client>