wcf Webサービスインスタンスの作成中にInvalidOperationException
-
09-06-2019 - |
質問
クラスライブラリから参照されるWCF Webサービスがあります。プロジェクトの実行後、クラスライブラリ内からサービスクライアントオブジェクトを作成すると、次のメッセージを含むInvalidOperationExceptionが表示されます。
契約を参照するデフォルトのエンドポイント要素が見つかりませんでした ServiceModelクライアントの「MyServiceReference.IMyService」 構成セクション。これは、構成ファイルがなかったためである可能性があります アプリケーションで見つかった、または一致するエンドポイント要素がないため このコントラクトはclient要素で見つけることができます。
インスタンスの作成に使用しているコードは次のとおりです。
myServiceClient = new MyServiceClient();
MyServiceClientの継承元
System.ServiceModel.ClientBase
これを解決するにはどうすればよいですか
注:同じサービスオブジェクトを作成し、それを呼び出すだけで問題なく動作する別のコンソールアプリケーションがあります。
解決
クラスライブラリのapp.configファイルを次に示します。
この構成設定をメインアプリの構成ファイルに配置する必要があります。 .NETアプリケーション(クラスライブラリを呼び出しています)は、ライブラリ構成ファイルではなく、独自の構成ファイルのデータを使用します。
他のヒント
または、コードでエンドポイントを設定できます:
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);
同様のケースがありました。 Webサービスを呼び出すクラスライブラリがあり、次にクラスライブラリの.DLLを呼び出す.EXEがありました。使用されるのは.EXEの構成ファイルであり、.DLL構成のファイルではないと思います。
しかし、リチャードが前述したように、名前空間を完全に修飾する必要がありました。それは少し苦痛です。 以下は私が変更したものです。痛みは、2つの場所で変更しなければならなかったことです。 1つは、サービス参照を作成するときに生成されるreference.csにあり、もう1つは構成ファイルにあります。したがって、Webサービスを変更して<!> quot; Update Reference <!> quot;を実行するたびに、 C#コードを再度変更する必要があります。
1)reference.csのConfigurationNameを次のように実際に変更する必要があります:
From:[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)次に、<!>#8220; contract <!>#8221;も変更します。関連するすべてのapp.config(.dll <!>#8217; sおよび.exe <!>#8217; sの場合)の値は次のとおりです。
差出人:
<!> lt; endpoint address = http ://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding = <!> quot; wsHttpBinding <!> quot; bindingConfiguration = <!> quot; WSHttpBinding_ITwoWayAsync <!> quot; contract = <!> quot; RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations <!> quot; name = <!> quot; WSHttpBinding_ITwoWayAsync <!> quot; <!> gt;
宛先:
<!> lt; endpoint address = http ://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding = <!> quot; wsHttpBinding <!> quot; bindingConfiguration = <!> quot; WSHttpBinding_ITwoWayAsync <!> quot; contract = <!> quot; TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations <!> quot; name = <!> quot; WSHttpBinding_ITwoWayAsync <!> quot; <!> gt;
明確にするために-完全な名前空間が何であるかをどのようにして知りましたか? プログラムの名前空間はTFBIC.RCT.HIPでした。その中に、C#コードには1つの追加があります 名前空間ステートメント:
namespace RCTHipComponents
この種のエラーは<endpoint>
ブロックの問題を指している傾向があるため、おそらくapp.configファイルを投稿しておくと役立ちます。コントラクト属性があなたに合っていることを確認してください。
編集:契約値を完全に修飾してみてください。完全な名前空間を使用します。それが必要だと思います。