6

クラスライブラリから参照されるWCFWebサービスがあります。プロジェクトの実行後、クラスライブラリ内からサービスクライアントオブジェクトを作成すると、次のメッセージを含むInvalidOperationExceptionが発生します。

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

インスタンスの作成に使用しているコードは次のとおりです。

myServiceClient = new MyServiceClient();

MyServiceClientが継承する場所

System.ServiceModel.ClientBase

どうすればこれを解決できますか?

注:同じサービスオブジェクトを作成して呼び出すだけの別のコンソールアプリケーションがあり、問題なく動作します。

4

4 に答える 4

8

または、コードでエンドポイントを設定できます。

http://msdn.microsoft.com/en-us/library/ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);
于 2010-03-11T09:42:34.000 に答える
4

クラス ライブラリの app.config ファイルは次のとおりです。

この構成設定をメイン アプリの構成ファイルに配置する必要があります。.NET アプリケーション (クラス ライブラリを呼び出している) は、ライブラリ構成ファイルではなく、独自の構成ファイルのデータを使用します。

于 2008-08-24T14:21:06.540 に答える
1

私も似たようなケースがありました。Web サービスを呼び出すクラス ライブラリがあり、次にクラス ライブラリの .DLL を呼び出す .EXE がありました。使用されるのは.EXEの構成ファイルであり、.DLL構成のファイルではないと思います。

しかし、上で Richard が言ったように、名前空間を完全に修飾する必要がありました。少し痛いです。以下はまさに私が変更したものです。問題は、サービス参照を作成するときに生成される reference.cs と構成ファイルの 2 つの場所で変更する必要があったことです。したがって、Web サービスを変更して「参照の更新」を行うたびに、C# コードを再度変更する必要があります。

1) 実際には、次のように reference.cs の ConfigurationName を変更する必要があります。

から: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

に: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2) 次に、関連するすべての app.config (.dll および .exe 用) の「contract」値を次のように変更します。

から:

<エンドポイント アドレス = http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" contract="RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestration" name="WSBindingHttpAsync ">

に:

<エンドポイント アドレス = http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" contract="TFBIC.RCT.HIP.Components. RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" name="WSHttpBinding_ITwoWayAsync">

明確にするために-完全な名前空間が何であるかをどうやって知ったのですか? プログラムの名前空間は TFBIC.RCT.HIP でした。その中に、C# コードには追加の名前空間ステートメントが 1 つあります。

namespace RCTHipComponents
于 2009-11-10T22:03:10.083 に答える
0

<endpoint>この種のエラーはブロック内の問題を示している傾向があるため、app.config ファイルを投稿するとおそらく役立つでしょう。コントラクト属性が適切であることを確認してください。

編集:契約値を完全に修飾してみてください。完全な名前空間を使用します。それが必要だと思います。

于 2008-08-24T12:29:30.863 に答える