0

iis で (ローカルに) ホストされている WCF サービスに ac# クライアントからアクセスしようとすると、次のエラーが発生します。

ServiceModel クライアント構成セクションで、名前が 'X' でコントラクトが 'Contract Name' のエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、この名前に一致するエンドポイント要素が client 要素に見つからなかったためである可能性があります。

これはクライアントの app.config です (接続をテストするためだけの NUnit フィクスチャです)。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_MyWs" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="Transport">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
           <endpoint address="https://localhost/MyWs/MyWs.svc"
                    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyWs"
                    contract="MyServiceSvc.IMyWs"
                    name="BasicHttpBinding_MyWs" />
        </client>
   </system.serviceModel>
</configuration>

ブラウズしたら

https://localhost/MyWs/MyWs.svc?wsdl

サーバー部分が正常に動作しているため、正しい出力が得られます。
さらに、soapUI で自分の ws をテストできるので、問題はクライアント、おそらく app.config にあるはずです。

誰かがそれを見たい場合に備えて、私のクライアントコード:

    [TestFixture]
    public class MyWsProxyFixture
    {
        private readonly MyWsClient _client = new MyWsClient();

        [Test]
        public void ProxyCreation()
        {
            Assert.IsNotNull(_client);
        }

        //More tests here
}

さらに面白いことに、まったく同じ構成とクライアントが別のマシンで動作します。はい、そうです。自分でも信じられませんが、そうです。

これを解決するためのヒントや提案をいただけますか?
ありがとう!

PS: クライアントのサービス参照は問題ありません。

4

2 に答える 2

1

私が見る限り、それは複数のプロジェクトの構成の問題である可能性があり

ます。ソリューションに複数のプロジェクトがある場合は、wcf サービスを使用している特定のプロジェクトの構成にその構成ファイルを配置する必要があります。

2 つのプロジェクトがあり、対応する 2 つの構成ファイルがあるとします。

于 2013-03-07T11:22:49.927 に答える
0

問題は App.config にまったくないことが判明しました。
実際、まったく同じ App.config が別のマシンで正しく機能していました。
問題は Nunit にありました。デフォルトでは、すべての dll を一時フォルダーにコピーし、そこからバイナリを実行する「シャドウ コピー」設定を使用します。私が理解できないのは、.configではなくdllをコピーする理由です。意味がありません!
シャドウ コピーを false に設定した後、マシンでも動作し始めました。

PS: 環境がデフォルトでシャドウ コピーをオフにする Resharper の下で実行されていたため、クライアントは他のマシンで動作していました。
それは今では理にかなっています!

これが同じ愚かな問題を抱えている人に役立つことを願っています

于 2013-03-12T07:56:26.993 に答える